UBSAN rightly complains on `push_front` here:
glslang/MachineIndependent/localintermediate.h:100:8: runtime error: load of value 160, which is not a valid value for type 'bool'
#0 in glslang::TCall::TCall(glslang::TCall&&) glslang/MachineIndependent/localintermediate.h:100
#1 in void __gnu_cxx::new_allocator<std::_List_node<glslang::TCall> >::construct<glslang::TCall, glslang::TCall>(glslang::TCall*, glslang::TCall&&) /usr/include/c++/10/ext/new_allocator.h:150
#2 in void std::allocator_traits<std::allocator<std::_List_node<glslang::TCall> > >::construct<glslang::TCall, glslang::TCall>(std::allocator<std::_List_node<glslang::TCall> >&, glslang::TCall*, glslang::TCall&&) /usr/include/c++/10/bits/alloc_traits.h:512
#3 in std::_List_node<glslang::TCall>* std::__cxx11::list<glslang::TCall, std::allocator<glslang::TCall> >::_M_create_node<glslang::TCall>(glslang::TCall&&) (...)
#4 in void std::__cxx11::list<glslang::TCall, std::allocator<glslang::TCall> >::_M_insert<glslang::TCall>(std::_List_iterator<glslang::TCall>, glslang::TCall&&) /usr/include/c++/10/bits/stl_list.h:1911
#5 in std::__cxx11::list<glslang::TCall, std::allocator<glslang::TCall> >::push_front(glslang::TCall&&) /usr/include/c++/10/bits/stl_list.h:1167
#6 in glslang::TIntermediate::addToCallGraph(TInfoSink&, std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char> > const&) glslang/MachineIndependent/Intermediate.cpp:2860
What happens here:
1. TCall's bool fields are not initialized on construction.
2. `push_front` move the `TCall` passed into it.
3. The move constructor copies unitialized bool, which may have an
out-of-range value.
What this fix does:
Calls `emplace_back` to ensure no copy/move constructor is called.
Fixes #2222
Refs #2112
| Name |
Last commit
|
Last update |
|---|---|---|
| External | Loading commit data... | |
| OGLCompilersDLL | Loading commit data... | |
| SPIRV | Loading commit data... | |
| StandAlone | Loading commit data... | |
| Test | Loading commit data... | |
| build_overrides | Loading commit data... | |
| glslang | Loading commit data... | |
| gtests | Loading commit data... | |
| hlsl | Loading commit data... | |
| kokoro | Loading commit data... | |
| ndk_test | Loading commit data... | |
| .appveyor.yml | Loading commit data... | |
| .clang-format | Loading commit data... | |
| .gitattributes | Loading commit data... | |
| .gitignore | Loading commit data... | |
| .gn | Loading commit data... | |
| .travis.yml | Loading commit data... | |
| Android.mk | Loading commit data... | |
| BUILD.bazel | Loading commit data... | |
| BUILD.gn | Loading commit data... | |
| CHANGES.md | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| CODE_OF_CONDUCT.md | Loading commit data... | |
| ChooseMSVCCRT.cmake | Loading commit data... | |
| DEPS | Loading commit data... | |
| LICENSE.txt | Loading commit data... | |
| README-spirv-remap.txt | Loading commit data... | |
| README.md | Loading commit data... | |
| WORKSPACE | Loading commit data... | |
| _config.yml | Loading commit data... | |
| build_info.h.tmpl | Loading commit data... | |
| build_info.py | Loading commit data... | |
| known_good.json | Loading commit data... | |
| known_good_khr.json | Loading commit data... | |
| license-checker.cfg | Loading commit data... | |
| standalone.gclient | Loading commit data... | |
| update_glslang_sources.py | Loading commit data... |