jgorbe added a comment.

Hi,

I found a clang crash that seems to be caused by this patch. Here's a reduced 
test case:

  template <class>
  class a {
   public:
    ~a();
    void b();
  };
  
  template <class c>
  a<c>::~a() try {
    b();
  } catch (...) {
  }
  
  class d {
   public:
    d(const char *, int);
    a<int> e;
  }
  
  d("", 1);

Building it with `clang -c -frounding-math` results in the following crash:

  Stack dump:
  0.      Program arguments: 
/usr/local/google/home/jgorbe/code/llvm-build/bin/clang-10 -cc1 -triple 
x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-fi
  le-name repro.cc -mrelocation-model static -mthread-model posix 
-mframe-pointer=all -fmath-errno -frounding-math -masm-verbose 
-mconstructor-aliases -munwind-tables -fu
  se-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb 
-resource-dir /usr/local/google/home/jgorbe/code/llvm-build/lib/clang/10.0.0 
-internal-isystem 
  /usr/lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8 -internal-isystem 
/usr/lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8 
-internal-isystem
   /usr/lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8 
-internal-isystem 
/usr/lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/backward -intern
  al-isystem /usr/local/include -internal-isystem 
/usr/local/google/home/jgorbe/code/llvm-build/lib/clang/10.0.0/include 
-internal-externc-isystem /usr/include/x86_64-lin
  ux-gnu -internal-externc-isystem /include -internal-externc-isystem 
/usr/include -fdeprecated-macro -fdebug-compilation-dir 
/usr/local/google/home/jgorbe/repro4 -ferror
  -limit 19 -fmessage-length 0 -fgnuc-version=4.2.1 -fobjc-runtime=gcc 
-fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics 
-faddrsig -o /tmp/repro
  -c9cae0.o -x c++ repro.cc 
  1.      <eof> parser at end of file
  2.      Per-file LLVM IR generation
  3.      repro.cc:4:3: Generating code for declaration 'a<int>::~a'
   #0 0x0000000007fb2b27 llvm::sys::PrintStackTrace(llvm::raw_ostream&) 
/usr/local/google/home/jgorbe/code/llvm/llvm/lib/Support/Unix/Signals.inc:532:11
 
   #1 0x0000000007fb2cc9 PrintStackTraceSignalHandler(void*) 
/usr/local/google/home/jgorbe/code/llvm/llvm/lib/Support/Unix/Signals.inc:593:1 
            
   #2 0x0000000007fb160b llvm::sys::RunSignalHandlers() 
/usr/local/google/home/jgorbe/code/llvm/llvm/lib/Support/Signals.cpp:67:5       
                 
   #3 0x0000000007fb3415 SignalHandler(int) 
/usr/local/google/home/jgorbe/code/llvm/llvm/lib/Support/Unix/Signals.inc:384:1 
                       
   #4 0x00007f6789ec03a0 __restore_rt 
(/lib/x86_64-linux-gnu/libpthread.so.0+0x123a0)                                 
                                                    
   #5 0x000000000739af45 
llvm::AttributeList::hasFnAttribute(llvm::Attribute::AttrKind) const 
/usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/Attributes.cpp:1315:10
   #6 0x00000000051a1964 
llvm::Function::hasFnAttribute(llvm::Attribute::AttrKind) const 
/usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/IR/Function.h:324:5   
 
   #7 0x00000000052421a1 llvm::IRBuilderBase::setConstrainedFPFunctionAttr() 
/usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/IR/IRBuilder.h:262:9
   #8 0x0000000005241b60 
llvm::IRBuilderBase::setConstrainedFPCallAttr(llvm::CallInst*) 
/usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/IR/IRBuilder.h:271:3
   #9 0x00000000084a516b llvm::IRBuilder<llvm::ConstantFolder, 
clang::CodeGen::CGBuilderInserter>::CreateCall(llvm::FunctionType*, 
llvm::Value*, llvm::ArrayRef<llvm::Value*>, 
llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, 
llvm::MDNode*) 
/usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/IR/IRBuilder.h:2274:9 
                                                                                
                                                                                
  #10 0x00000000084a4488 llvm::IRBuilder<llvm::ConstantFolder, 
clang::CodeGen::CGBuilderInserter>::CreateCall(llvm::FunctionCallee, 
llvm::ArrayRef<llvm::Value*>, 
llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, 
llvm::MDNode*) 
/usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/IR/IRBuilder.h:2288:5
  #11 0x000000000849288c 
clang::CodeGen::CodeGenFunction::EmitRuntimeCall(llvm::FunctionCallee, 
llvm::ArrayRef<llvm::Value*>, llvm::Twine const&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCall.cpp:3726:26
  #12 0x000000000849278d 
clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(llvm::FunctionCallee, 
llvm::ArrayRef<llvm::Value*>, llvm::Twine const&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCall.cpp:3691:19    
                                                                                
                        
  #13 0x000000000897b3e4 (anonymous 
namespace)::ItaniumCXXABI::emitTerminateForUnexpectedException(clang::CodeGen::CodeGenFunction&,
 llvm::Value*) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/ItaniumCXXABI.cpp:4364:5
                       
  #14 0x000000000865698d clang::CodeGen::CodeGenFunction::getTerminateHandler() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGException.cpp:1504:19
  #15 0x00000000086561de 
clang::CodeGen::CodeGenFunction::getEHDispatchBlock(clang::CodeGen::EHScopeStack::stable_iterator)
 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGException.cpp:630:21
                                                                                
                                                      
  #16 0x000000000864e7d8 clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCleanup.cpp:970:23
  #17 0x000000000864d053 
clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator,
 std::initializer_list<llvm::Value**>) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCleanup.cpp:423:3
  #18 0x000000000864eae3 
clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator,
 unsigned long, std::initializer_list<llvm::Value**>) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCleanup.cpp:479:19  
                                                                                
   
  #19 0x000000000864404d 
clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(std::initializer_list<llvm::Value**>)
 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenFunction.h:756:11
  #20 0x0000000008655cd4 
clang::CodeGen::CodeGenFunction::ExitCXXTryStmt(clang::CXXTryStmt const&, bool) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGException.cpp:1234:16
  #21 0x000000000868bf3c 
clang::CodeGen::CodeGenFunction::EmitDestructorBody(clang::CodeGen::FunctionArgList&)
 /usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/C
  GClass.cpp:1531:1
  #22 0x0000000008673ce5 
clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, 
llvm::Function*, clang::CodeGen::CGFunctionInfo const&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenFunction.cpp:1256:5
  #23 0x00000000087aea54 
clang::CodeGen::CodeGenModule::codegenCXXStructor(clang::GlobalDecl) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CGCXX.cpp:214:3
  #24 0x0000000008980a5e (anonymous 
namespace)::ItaniumCXXABI::emitCXXStructor(clang::GlobalDecl) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/ItaniumCXXABI.cpp:4003:19
  #25 0x000000000853c297 
clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, 
llvm::GlobalValue*) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2816:9
       
  #26 0x0000000008532fb9 clang::CodeGen::CodeGenModule::EmitDeferred() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2132:5
                 
  #27 0x0000000008533004 clang::CodeGen::CodeGenModule::EmitDeferred() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2138:7
  #28 0x0000000008533004 clang::CodeGen::CodeGenModule::EmitDeferred() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2138:7
  #29 0x0000000008533004 clang::CodeGen::CodeGenModule::EmitDeferred() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2138:7
  #30 0x0000000008531692 clang::CodeGen::CodeGenModule::Release() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenModule.cpp:393:3
  #31 0x0000000008e96d12 (anonymous 
namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/ModuleBuilder.cpp:0:18
                                                                                
                                                                     
  #32 0x0000000008e90d99 
clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenAction.cpp:242:14
                                                                                
                                                                                
     
  #33 0x000000000af2c3ce clang::ParseAST(clang::Sema&, bool, bool) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/Parse/ParseAST.cpp:178:12     
                   
  #34 0x0000000008cea5c2 clang::ASTFrontendAction::ExecuteAction() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/Frontend/FrontendAction.cpp:1044:1
                   
  #35 0x0000000008e8e72b clang::CodeGenAction::ExecuteAction() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/CodeGen/CodeGenAction.cpp:1089:1
                         
  #36 0x0000000008ce9f88 clang::FrontendAction::Execute() 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/Frontend/FrontendAction.cpp:939:7
                             
  #37 0x0000000008c193b3 
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/Frontend/CompilerInstance.cpp:964:23
                                                                                
                                                                                
    
  #38 0x0000000008e78e19 
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) 
/usr/local/google/home/jgorbe/code/llvm/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:290:8
                                                                        
  #39 0x000000000517a8d2 cc1_main(llvm::ArrayRef<char const*>, char const*, 
void*) 
/usr/local/google/home/jgorbe/code/llvm/clang/tools/driver/cc1_main.cpp:250:13  
       
  #40 0x000000000516e5ff ExecuteCC1Tool(llvm::ArrayRef<char const*>, 
llvm::StringRef) 
/usr/local/google/home/jgorbe/code/llvm/clang/tools/driver/driver.cpp:309:5     
    
  #41 0x000000000516d9c9 main 
/usr/local/google/home/jgorbe/code/llvm/clang/tools/driver/driver.cpp:382:5     
                                                            
  #42 0x00007f678914e52b __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x2352b)
  #43 0x000000000516d1ba _start 
(/usr/local/google/home/jgorbe/code/llvm-build/bin/clang-10+0x516d1ba)          
                                                 
  clang-10: error: unable to execute command: Segmentation fault                
                                                                                
          
  clang-10: error: clang frontend command failed due to signal (use -v to see 
invocation)                                                                     
            
  clang version 10.0.0 (https://github.com/llvm/llvm-project.git 
f2e65447b3cb6340883957e033e77095a025ebdc)                                       
             


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62731/new/

https://reviews.llvm.org/D62731



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to