-
Notifications
You must be signed in to change notification settings - Fork 641
Open
Description
Achieved on a similar test case to #6104
We're compiling this HLSL shader which we need to compile with -fcgl to get to the SPIR-V
https://godbolt.org/z/r75PE1xWM
I don't know how to invoke the spv-opt properly on Godbolt with illegal SPIR-V, probably assembler complains before even seeing --legalize-hlsl
https://godbolt.org/z/fEMcoKTv3
Results in this callstack before crashing in DXC without the -fcgl flag inside of SPIR-V Opt.
msvcp140d.dll!00007ff8c692076e() Unknown
msvcp140d.dll!00007ff8c691ea06() Unknown
> dxcompiler.dll!std::_Iterator_base12::_Adopt_locked(const std::_Container_base12 * _Parent) Line 1367 C++
dxcompiler.dll!std::_Iterator_base12::_Adopt(const std::_Container_base12 * _Parent) Line 1307 C++
dxcompiler.dll!std::_List_unchecked_const_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>,std::_Iterator_base12>::_List_unchecked_const_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>,std::_Iterator_base12>(std::_List_node<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>,void *> * _Pnode, const std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>> * _Plist) Line 38 C++
dxcompiler.dll!std::_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>>::_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>>(std::_List_node<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>,void *> *) C++
dxcompiler.dll!std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>>::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>>(std::_List_node<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>,void *> *) C++
dxcompiler.dll!std::list<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>,std::allocator<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>>::_Make_iter(std::_List_node<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>,void *> * _Where) Line 1137 C++
dxcompiler.dll!std::_Hash<std::_Umap_traits<spvtools::opt::BasicBlock *,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>,std::_Uhash_compare<spvtools::opt::BasicBlock *,std::hash<spvtools::opt::BasicBlock *>,std::equal_to<spvtools::opt::BasicBlock *>>,std::allocator<std::pair<spvtools::opt::BasicBlock * const,std::unordered_map<unsigned int,unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned int>>>>>,0>>::find(spvtools::opt::BasicBlock * const & _Keyval) Line 1231 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetValueAtBlock(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 247 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 260 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
dxcompiler.dll!spvtools::opt::SSARewriter::GetReachingDef(unsigned int var_id, spvtools::opt::BasicBlock * bb) Line 268 C++
...
The maximum number of stack frames supported by Visual Studio has been exceeded.
Its also possible that the illegal SPIR-V emitted by DXC is causing infinite recursion / loops in the parsed SPIR-V, because the input HLSL is just a simple unit-test shader, so I doubt the chains are so deep to actually overflow the stack which is a few megs.
Metadata
Metadata
Assignees
Labels
No labels