Closed kennyzzhang closed 10 months ago
Minimal example:
template <class T> class A { }; class B { A<B> a; }; void identity(void* view) {} void reduce(void* l, void* r) {} B _Hyperobject(identity, reduce) b;
Trying to compile this code gives the following stackdump:
Stack dump: 0. Program arguments: /home/kzzhang/OpenCilk/build/bin/clang-16 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -clear-ast-before-backend -main-file-name bug.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-err no -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=/home/kzzhang/OpenCilk/tutorial -resource-dir /home/kzzhang/O penCilk/build/lib/clang/16 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/ c++/12/backward -internal-isystem /home/kzzhang/OpenCilk/build/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -inter nal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/home/kzzhang/OpenCilk/tutorial -ferror-limit 19 -fopencilk --opencilk-abi-bitcode=/home/kzzhang/OpenCilk/build/lib/clang/16/lib/x86_64-unknown-linux-gnu/libope ncilk-abi.bc -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/bug-1e516d.o -x c++ bug.cpp 1. bug.cpp:11:35: current parser token ';' #0 0x000055a4d7de9acb llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/kzzhang/OpenCilk/build/bin/clang-16+0x2871acb) #1 0x000055a4d7de73ab SignalHandler(int) Signals.cpp:0:0 #2 0x00007f8c265bdfd0 (/lib/x86_64-linux-gnu/libc.so.6+0x3bfd0) #3 0x000055a4db0b2655 getInterestingTagDecl(clang::TagDecl*) Type.cpp:0:0 #4 0x000055a4da9d9205 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #5 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #6 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #7 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #8 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #9 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #10 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #11 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #12 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #13 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #14 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #15 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 ... #248 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #249 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #250 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #251 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #252 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #253 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 #254 0x000055a4da9d9311 DeclContainsHyperobject(clang::RecordDecl const*) SemaType.cpp:0:0 #255 0x000055a4da9d9146 ContainsHyperobject(clang::QualType) SemaType.cpp:0:0 clang-16: error: unable to execute command: Segmentation fault clang-16: error: clang frontend command failed due to signal (use -v to see invocation) clang version 16.0.6 (https://github.com/OpenCilk/opencilk-project 03a724da592c2608e305f5c7f4e500fef2d66c6a)
In the source, ContainsHyperobject has a comment saying that a deep search is done to ensure there are no nested hyperobjects. In the part of the function that processes template specializations, it seems like all the template arguments are recursively searched for nested hyperobjects, resulting in infinite recursion.
ContainsHyperobject
Minimal example:
Trying to compile this code gives the following stackdump:
In the source,
ContainsHyperobject
has a comment saying that a deep search is done to ensure there are no nested hyperobjects. In the part of the function that processes template specializations, it seems like all the template arguments are recursively searched for nested hyperobjects, resulting in infinite recursion.