llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.02k stars 11.57k forks source link

Compiler crashes with Segmentation fault on SuperTest #67801

Open MaximPavlenko opened 11 months ago

MaximPavlenko commented 11 months ago

LLVM 17 compiler crashes with this reduced piece of code from ACE SuperTest. I also tried with older versions and it looks like it always was an issue. Compiler should generate an error, but LLVM just crashes.

Reduced testcase:

template <typename> struct foo { enum color : int; };
template <typename T> enum foo<T>::color : T { green };
void fn1() { green; }

Error:

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.  Program arguments: /install/CentOS73/llvm-17/bin/clang-17 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name x_0001.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/work/testcase_SuperTest_Cxx11_14_5_1_4__x_0001 -resource-dir /install/CentOS73/llvm-17/lib/clang/17 -c-isystem /usr/include/x86_64-linux-gnu -cxx-isystem /usr/include/x86_64-linux-gnu -internal-isystem /install/CentOS73/llvm-17/bin/../include/x86_64-unknown-linux-gnu/c++/v1 -internal-isystem /install/CentOS73/llvm-17/bin/../include/c++/v1 -internal-isystem /install/CentOS73/llvm-17/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /u/mwdtauto1/mwdtinfra/install/CentOS73/llvm-17/bin/../lib/gcc/x86_64-redhat-linux/9.2.0/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/work/testcase_SuperTest_Cxx11_14_5_1_4__x_0001 -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/x_0001-fca7a3.o -x c++ x_0001.cpp
1.  <eof> parser at end of file
2.  x_0001.cpp:3:6: LLVM IR generation of declaration 'fn1'
3.  x_0001.cpp:3:6: Generating code for declaration 'fn1'
 #0 0x000055555963ff08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/install/CentOS73/llvm-17/bin/clang-17+0x40ebf08)
 #1 0x000055555963d74e llvm::sys::RunSignalHandlers() (/install/CentOS73/llvm-17/bin/clang-17+0x40e974e)
 #2 0x0000555559640acd SignalHandler(int) Signals.cpp:0:0
 #3 0x00007ffff7bce630 __restore_rt sigaction.c:0:0
 #4 0x00005555598ca017 clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType) (/install/CentOS73/llvm-17/bin/clang-17+0x4376017)
 #5 0x00005555599b6883 clang::CodeGen::CodeGenFunction::EmitLoadOfBitfieldLValue(clang::CodeGen::LValue, clang::SourceLocation) (/install/CentOS73/llvm-17/bin/clang-17+0x4462883)
 #6 0x00005555599b3732 clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(clang::CodeGen::LValue, clang::SourceLocation) (/install/CentOS73/llvm-17/bin/clang-17+0x445f732)
 #7 0x00005555599d5c23 (anonymous namespace)::ScalarExprEmitter::VisitDeclRefExpr(clang::DeclRefExpr*) CGExprScalar.cpp:0:0
 #8 0x00005555599996a5 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/install/CentOS73/llvm-17/bin/clang-17+0x44456a5)
 #9 0x00005555599faa6d clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/install/CentOS73/llvm-17/bin/clang-17+0x44a6a6d)
#10 0x0000555559989ef1 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/install/CentOS73/llvm-17/bin/clang-17+0x4435ef1)
#11 0x000055555987788f clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/install/CentOS73/llvm-17/bin/clang-17+0x432388f)
#12 0x000055555986c802 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/install/CentOS73/llvm-17/bin/clang-17+0x4318802)
#13 0x000055555987392a clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/install/CentOS73/llvm-17/bin/clang-17+0x431f92a)
#14 0x000055555986b431 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (/install/CentOS73/llvm-17/bin/clang-17+0x4317431)
#15 0x000055555a42a34c (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) (.llvm.6140880867044269546) ModuleBuilder.cpp:0:0
#16 0x000055555a427d0d clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) CodeGenAction.cpp:0:0
#17 0x000055555be3d97a clang::ParseAST(clang::Sema&, bool, bool) (/install/CentOS73/llvm-17/bin/clang-17+0x68e997a)
#18 0x000055555a320e37 clang::FrontendAction::Execute() (/install/CentOS73/llvm-17/bin/clang-17+0x4dcce37)
#19 0x000055555a2704a4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/install/CentOS73/llvm-17/bin/clang-17+0x4d1c4a4)
#20 0x000055555a421542 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/install/CentOS73/llvm-17/bin/clang-17+0x4ecd542)
#21 0x0000555557e79587 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/install/CentOS73/llvm-17/bin/clang-17+0x2925587)
#22 0x0000555557e76f9e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#23 0x0000555557e7565c clang_main(int, char**, llvm::ToolContext const&) (/install/CentOS73/llvm-17/bin/clang-17+0x292165c)
#24 0x0000555557e87541 main (/install/CentOS73/llvm-17/bin/clang-17+0x2933541)
#25 0x00007ffff66ce555 __libc_start_main (/lib64/libc.so.6+0x22555)
#26 0x0000555557e67169 _start (/install/CentOS73/llvm-17/bin/clang-17+0x2913169)
clang++: error: unable to execute command: Segmentation fault
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /install/CentOS73/llvm-17/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/x_0001-78b096.cpp
clang++: note: diagnostic msg: /tmp/x_0001-78b096.sh
clang++: note: diagnostic msg: 

********************

GCC produces an error, but does not crash:

x_0001.cpp:2:44: error: different underlying type in enum ‘enum foo< <template-parameter-1-1> >::color’
    2 | template <typename T> enum foo<T>::color : T { green };
      |                                            ^
x_0001.cpp:1:47: note: previous definition here
    1 | template <typename> struct foo { enum color : int; };
      |                                               ^~~
x_0001.cpp: In function ‘void fn1()’:
x_0001.cpp:3:14: error: ‘green’ was not declared in this scope
    3 | void fn1() { green; }
      |              ^~~~~
llvmbot commented 11 months ago

@llvm/issue-subscribers-clang-codegen

LLVM 17 compiler crashes with this reduced piece of code from ACE SuperTest. I also tried with older versions and it looks like it always was an issue. Compiler should generate an error, but LLVM just crashes. Reduced testcase: ``` template <typename> struct foo { enum color : int; }; template <typename T> enum foo<T>::color : T { green }; void fn1() { green; } ``` Error: ``` PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump: 0. Program arguments: /install/CentOS73/llvm-17/bin/clang-17 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name x_0001.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/work/testcase_SuperTest_Cxx11_14_5_1_4__x_0001 -resource-dir /install/CentOS73/llvm-17/lib/clang/17 -c-isystem /usr/include/x86_64-linux-gnu -cxx-isystem /usr/include/x86_64-linux-gnu -internal-isystem /install/CentOS73/llvm-17/bin/../include/x86_64-unknown-linux-gnu/c++/v1 -internal-isystem /install/CentOS73/llvm-17/bin/../include/c++/v1 -internal-isystem /install/CentOS73/llvm-17/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /u/mwdtauto1/mwdtinfra/install/CentOS73/llvm-17/bin/../lib/gcc/x86_64-redhat-linux/9.2.0/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/work/testcase_SuperTest_Cxx11_14_5_1_4__x_0001 -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/x_0001-fca7a3.o -x c++ x_0001.cpp 1. <eof> parser at end of file 2. x_0001.cpp:3:6: LLVM IR generation of declaration 'fn1' 3. x_0001.cpp:3:6: Generating code for declaration 'fn1' #0 0x000055555963ff08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/install/CentOS73/llvm-17/bin/clang-17+0x40ebf08) #1 0x000055555963d74e llvm::sys::RunSignalHandlers() (/install/CentOS73/llvm-17/bin/clang-17+0x40e974e) #2 0x0000555559640acd SignalHandler(int) Signals.cpp:0:0 #3 0x00007ffff7bce630 __restore_rt sigaction.c:0:0 #4 0x00005555598ca017 clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType) (/install/CentOS73/llvm-17/bin/clang-17+0x4376017) #5 0x00005555599b6883 clang::CodeGen::CodeGenFunction::EmitLoadOfBitfieldLValue(clang::CodeGen::LValue, clang::SourceLocation) (/install/CentOS73/llvm-17/bin/clang-17+0x4462883) #6 0x00005555599b3732 clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(clang::CodeGen::LValue, clang::SourceLocation) (/install/CentOS73/llvm-17/bin/clang-17+0x445f732) #7 0x00005555599d5c23 (anonymous namespace)::ScalarExprEmitter::VisitDeclRefExpr(clang::DeclRefExpr*) CGExprScalar.cpp:0:0 #8 0x00005555599996a5 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/install/CentOS73/llvm-17/bin/clang-17+0x44456a5) #9 0x00005555599faa6d clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/install/CentOS73/llvm-17/bin/clang-17+0x44a6a6d) #10 0x0000555559989ef1 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/install/CentOS73/llvm-17/bin/clang-17+0x4435ef1) #11 0x000055555987788f clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/install/CentOS73/llvm-17/bin/clang-17+0x432388f) #12 0x000055555986c802 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/install/CentOS73/llvm-17/bin/clang-17+0x4318802) #13 0x000055555987392a clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/install/CentOS73/llvm-17/bin/clang-17+0x431f92a) #14 0x000055555986b431 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (/install/CentOS73/llvm-17/bin/clang-17+0x4317431) #15 0x000055555a42a34c (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) (.llvm.6140880867044269546) ModuleBuilder.cpp:0:0 #16 0x000055555a427d0d clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) CodeGenAction.cpp:0:0 #17 0x000055555be3d97a clang::ParseAST(clang::Sema&, bool, bool) (/install/CentOS73/llvm-17/bin/clang-17+0x68e997a) #18 0x000055555a320e37 clang::FrontendAction::Execute() (/install/CentOS73/llvm-17/bin/clang-17+0x4dcce37) #19 0x000055555a2704a4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/install/CentOS73/llvm-17/bin/clang-17+0x4d1c4a4) #20 0x000055555a421542 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/install/CentOS73/llvm-17/bin/clang-17+0x4ecd542) #21 0x0000555557e79587 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/install/CentOS73/llvm-17/bin/clang-17+0x2925587) #22 0x0000555557e76f9e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0 #23 0x0000555557e7565c clang_main(int, char**, llvm::ToolContext const&) (/install/CentOS73/llvm-17/bin/clang-17+0x292165c) #24 0x0000555557e87541 main (/install/CentOS73/llvm-17/bin/clang-17+0x2933541) #25 0x00007ffff66ce555 __libc_start_main (/lib64/libc.so.6+0x22555) #26 0x0000555557e67169 _start (/install/CentOS73/llvm-17/bin/clang-17+0x2913169) clang++: error: unable to execute command: Segmentation fault clang++: error: clang frontend command failed due to signal (use -v to see invocation) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /install/CentOS73/llvm-17/bin clang++: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: clang++: note: diagnostic msg: /tmp/x_0001-78b096.cpp clang++: note: diagnostic msg: /tmp/x_0001-78b096.sh clang++: note: diagnostic msg: ******************** ``` GCC produces an error, but does not crash: ``` x_0001.cpp:2:44: error: different underlying type in enum ‘enum foo< <template-parameter-1-1> >::color’ 2 | template <typename T> enum foo<T>::color : T { green }; | ^ x_0001.cpp:1:47: note: previous definition here 1 | template <typename> struct foo { enum color : int; }; | ^~~ x_0001.cpp: In function ‘void fn1()’: x_0001.cpp:3:14: error: ‘green’ was not declared in this scope 3 | void fn1() { green; } | ^~~~~ ```
tbaederr commented 11 months ago

Assertion is:

bool clang::Expr::EvaluateAsRValue(EvalResult &, const ASTContext &, bool) const: Assertion `!isValueDependent() && "Expression evaluator can't be called on a dependent expression."' failed.

Backtrace:

    #5: ExprConstant.cpp:15369  clang::Expr::EvaluateAsRValue(this=0x0000621000073c88, Result=0x00007fff6e012880, Ctx=0x000062a000000200, InConstantContext=false) const
    #6: CGExpr.cpp:1517  clang::CodeGen::CodeGenFunction::tryEmitAsConstant(this=0x00007fff6e3940c0, refExpr=0x0000621000073c88)
    #7: CGExprScalar.cpp:506  (anonymous namespace)::ScalarExprEmitter::VisitDeclRefExpr(this=0x00007fff6dd6d240, E=0x0000621000073c88)
    #8: StmtNodes.inc:1116  clang::StmtVisitorBase<std::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(this=0x00007fff6dd6d240, S=0x0000621000073c88)
    #9: CGExprScalar.cpp:407  (anonymous namespace)::ScalarExprEmitter::Visit(this=0x00007fff6dd6d240, E=0x0000621000073c88)
    #10: CGExprScalar.cpp:5099  clang::CodeGen::CodeGenFunction::EmitScalarExpr(this=0x00007fff6e3940c0, E=0x0000621000073c88, IgnoreResultAssign=true)
    #11: CGExpr.cpp:208  clang::CodeGen::CodeGenFunction::EmitAnyExpr(this=0x00007fff6e3940c0, E=0x0000621000073c88, aggSlot=AggValueSlot @ 0x00007fff6df43820, ignoreResult=true)
    #12: CGExpr.cpp:183  clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(this=0x00007fff6e3940c0, E=0x0000621000073c88)
    #13: CGStmt.cpp:124  clang::CodeGen::CodeGenFunction::EmitStmt(this=0x00007fff6e3940c0, S=0x0000621000073c88, Attrs=ArrayRef<const clang::Attr *> @ 0x00007fff6de8a320)
    #14: CGStmt.cpp:542  clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(this=0x00007fff6e3940c0, S=0x0000621000073cb0, GetLast=false, AggSlot=AggValueSlot @ 0x00007fff6e012420)
    #15: CodeGenFunction.cpp:1262  clang::CodeGen::CodeGenFunction::EmitFunctionBody(this=0x00007fff6e3940c0, Body=0x0000621000073cb0)
    #16: CodeGenFunction.cpp:1481  clang::CodeGen::CodeGenFunction::GenerateCode(this=0x00007fff6e3940c0, GD=GlobalDecl @ 0x00007fff6e1ae020, Fn=0x000060c000000c48, FnInfo=0x0000607000003cf0)
    #17: CodeGenModule.cpp:5668  clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(this=0x0000621000020900, GD=GlobalDecl @ 0x00007fff6e394020, GV=0x000060c000000c48)
    #18: CodeGenModule.cpp:3933  clang::CodeGen::CodeGenModule::EmitGlobalDefinition(this=0x0000621000020900, GD=GlobalDecl @ 0x00007fff6e009c20, GV=0x0000000000000000)
    #19: CodeGenModule.cpp:3673  clang::CodeGen::CodeGenModule::EmitGlobal(this=0x0000621000020900, GD=GlobalDecl @ 0x00007fff6e009820)
    #20: CodeGenModule.cpp:6569  clang::CodeGen::CodeGenModule::EmitTopLevelDecl(this=0x0000621000020900, D=0x0000621000073b88)
    #21: ModuleBuilder.cpp:190  (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(this=0x000060f000000220, DG=DeclGroupRef @ 0x00007fff6dd4f020)
    #22: CodeGenAction.cpp:235  clang::BackendConsumer::HandleTopLevelDecl(this=0x0000614000002840, D=DeclGroupRef @ 0x00007fff6de79020)
    #23: ParseAST.cpp:167  clang::ParseAST(S=0x0000629000005200, PrintStats=false, SkipFunctionBodies=false)
    #24: FrontendAction.cpp:1184  clang::ASTFrontendAction::ExecuteAction(this=0x0000611000002ac0)
    #25: CodeGenAction.cpp:1207  clang::CodeGenAction::ExecuteAction(this=0x0000611000002ac0)
    #26: FrontendAction.cpp:1070  clang::FrontendAction::Execute(this=0x0000611000002ac0)
    #27: CompilerInstance.cpp:1051  clang::CompilerInstance::ExecuteAction(this=0x0000614000000e40, Act=0x0000611000002ac0)
    #28: ExecuteCompilerInvocation.cpp:272  clang::ExecuteCompilerInvocation(Clang=0x0000614000000e40)