clangir icon indicating copy to clipboard operation
clangir copied to clipboard

Not completely implemented `CIRGenTypes::getRecordTypeName`

Open ChuanqiXu9 opened this issue 8 months ago • 10 comments

Reproducer:

// test.cc
#include <memory>

std::unique_ptr<char> stack_;
clang++  -std=c++11 -c test.cc -Xclang  -fclangir  -Xclang -emit-cir  -o test.cir

Crash log:

NYI
UNREACHABLE executed at /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenTypes.cpp:74!
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: /home/chuanqi.xcq/clangir/build_debug/bin/clang++ -std=c++11 -c thread.cc -Xclang -fclangir -Xclang -emit-cir -o thread.cir
1.	<eof> parser at end of file
2.	thread.cc:3:23: LLVM IR generation of declaration 'stack_'
 #0 0x00000000088d03fd llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/chuanqi.xcq/clangir/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x00000000088d08eb PrintStackTraceSignalHandler(void*) /home/chuanqi.xcq/clangir/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x00000000088ce976 llvm::sys::RunSignalHandlers() /home/chuanqi.xcq/clangir/llvm/lib/Support/Signals.cpp:105:5
 #3 0x00000000088cfc8e llvm::sys::CleanupOnSignal(unsigned long) /home/chuanqi.xcq/clangir/llvm/lib/Support/Unix/Signals.inc:368:1
 #4 0x00000000087fd157 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/chuanqi.xcq/clangir/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
 #5 0x00000000087fd4f5 CrashRecoverySignalHandler(int) /home/chuanqi.xcq/clangir/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
 #6 0x00007ffff7fb5100 __restore_rt sigaction.c:0:0
 #7 0x00007ffff7683605 raise (/lib64/libc.so.6+0x3d605)
 #8 0x00007ffff766c8a2 abort (/lib64/libc.so.6+0x268a2)
 #9 0x00000000088056a0 llvm::install_out_of_memory_new_handler() /home/chuanqi.xcq/clangir/llvm/lib/Support/ErrorHandling.cpp:194:0
#10 0x000000000abc744d cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0::operator()(clang::TemplateArgument const&) const /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenTypes.cpp:76:7
#11 0x000000000abc7320 void llvm::interleave<clang::TemplateArgument const*, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, void llvm::interleave<llvm::ArrayRef<clang::TemplateArgument>, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::raw_svector_ostream, clang::TemplateArgument const>(llvm::ArrayRef<clang::TemplateArgument> const&, llvm::raw_svector_ostream&, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::StringRef const&)::'lambda'(), void>(llvm::ArrayRef<clang::TemplateArgument>, llvm::ArrayRef<clang::TemplateArgument>, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::raw_svector_ostream) /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLExtras.h:2132:3
#12 0x000000000abc72ce void llvm::interleave<llvm::ArrayRef<clang::TemplateArgument>, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::raw_svector_ostream, clang::TemplateArgument const>(llvm::ArrayRef<clang::TemplateArgument> const&, llvm::raw_svector_ostream&, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::StringRef const&) /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLExtras.h:2154:1
#13 0x000000000abc4301 void llvm::interleaveComma<llvm::ArrayRef<clang::TemplateArgument>, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0, llvm::raw_svector_ostream, clang::TemplateArgument const>(llvm::ArrayRef<clang::TemplateArgument> const&, llvm::raw_svector_ostream&, cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef)::$_0) /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLExtras.h:2168:1
#14 0x000000000abc415c cir::CIRGenTypes::getRecordTypeName[abi:cxx11](clang::RecordDecl const*, llvm::StringRef) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenTypes.cpp:78:17
#15 0x000000000abc444e cir::CIRGenTypes::convertRecordDeclType(clang::RecordDecl const*) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenTypes.cpp:193:17
#16 0x000000000abc4b89 cir::CIRGenTypes::ConvertType(clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenTypes.cpp:366:12
#17 0x000000000ac3ec4d (anonymous namespace)::ConstStructBuilder::Finalize(clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:788:37
#18 0x000000000ac369b4 (anonymous namespace)::ConstStructBuilder::BuildStruct(cir::ConstantEmitter&, clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:815:18
#19 0x000000000ac35b07 cir::ConstantEmitter::tryEmitPrivate(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1792:12
#20 0x000000000ac34d1d cir::ConstantEmitter::tryEmitPrivateForMemory(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1642:12
#21 0x000000000ac3ea9c (anonymous namespace)::ConstStructBuilder::Build(clang::APValue const&, clang::RecordDecl const*, bool, clang::CXXRecordDecl const*, clang::CharUnits) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:764:17
#22 0x000000000ac3e8a7 (anonymous namespace)::ConstStructBuilder::Build(clang::APValue const&, clang::RecordDecl const*, bool, clang::CXXRecordDecl const*, clang::CharUnits) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:736:52
#23 0x000000000ac36972 (anonymous namespace)::ConstStructBuilder::BuildStruct(cir::ConstantEmitter&, clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:812:7
#24 0x000000000ac35b07 cir::ConstantEmitter::tryEmitPrivate(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1792:12
#25 0x000000000ac34d1d cir::ConstantEmitter::tryEmitPrivateForMemory(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1642:12
#26 0x000000000ac3ea9c (anonymous namespace)::ConstStructBuilder::Build(clang::APValue const&, clang::RecordDecl const*, bool, clang::CXXRecordDecl const*, clang::CharUnits) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:764:17
#27 0x000000000ac36972 (anonymous namespace)::ConstStructBuilder::BuildStruct(cir::ConstantEmitter&, clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:812:7
#28 0x000000000ac35b07 cir::ConstantEmitter::tryEmitPrivate(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1792:12
#29 0x000000000ac34d1d cir::ConstantEmitter::tryEmitPrivateForMemory(clang::APValue const&, clang::QualType) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1642:12
#30 0x000000000ac31776 cir::ConstantEmitter::tryEmitPrivateForVarInit(clang::VarDecl const&) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1580:12
#31 0x000000000ac31456 cir::ConstantEmitter::tryEmitForInitializer(clang::VarDecl const&) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenExprConst.cpp:1497:23
#32 0x000000000ababbe2 cir::CIRGenModule::buildGlobalVarDefinition(clang::VarDecl const*, bool) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenModule.cpp:981:33
#33 0x000000000aba9185 cir::CIRGenModule::buildGlobalDefinition(clang::GlobalDecl, mlir::Operation*) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenModule.cpp:1184:5
#34 0x000000000aba7f42 cir::CIRGenModule::buildGlobal(clang::GlobalDecl) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenModule.cpp:431:5
#35 0x000000000abadcf0 cir::CIRGenModule::buildTopLevelDecl(clang::Decl*) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenModule.cpp:1393:5
#36 0x000000000aba46c0 cir::CIRGenerator::HandleTopLevelDecl(clang::DeclGroupRef) /home/chuanqi.xcq/clangir/clang/lib/CIR/CodeGen/CIRGenerator.cpp:84:67
#37 0x000000000a975dda cir::CIRGenConsumer::HandleTopLevelDecl(clang::DeclGroupRef) /home/chuanqi.xcq/clangir/clang/lib/CIR/FrontendAction/CIRGenAction.cpp:140:3
#38 0x000000000f02c26d clang::ParseAST(clang::Sema&, bool, bool) /home/chuanqi.xcq/clangir/clang/lib/Parse/ParseAST.cpp:167:11
#39 0x0000000009da9f84 clang::ASTFrontendAction::ExecuteAction() /home/chuanqi.xcq/clangir/clang/lib/Frontend/FrontendAction.cpp:1214:1
#40 0x000000000a974b8f cir::CIRGenAction::ExecuteAction() /home/chuanqi.xcq/clangir/clang/lib/CIR/FrontendAction/CIRGenAction.cpp:407:5
#41 0x0000000009da999c clang::FrontendAction::Execute() /home/chuanqi.xcq/clangir/clang/lib/Frontend/FrontendAction.cpp:1102:7
#42 0x0000000009cc51aa clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/chuanqi.xcq/clangir/clang/lib/Frontend/CompilerInstance.cpp:1062:23
#43 0x0000000009f80c52 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/chuanqi.xcq/clangir/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:342:8
#44 0x0000000006a7b861 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/chuanqi.xcq/clangir/clang/tools/driver/cc1_main.cpp:232:13
#45 0x0000000006a6e1f2 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/chuanqi.xcq/clangir/clang/tools/driver/driver.cpp:215:5
#46 0x0000000006a6ec9d clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(llvm::SmallVectorImpl<char const*>&) const /home/chuanqi.xcq/clangir/clang/tools/driver/driver.cpp:355:7
#47 0x0000000006a6ec6d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#48 0x0000000009b55921 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#49 0x0000000009b526c8 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0::operator()() const /home/chuanqi.xcq/clangir/clang/lib/Driver/Job.cpp:440:34
#50 0x0000000009b52695 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#51 0x0000000007512ef9 llvm::function_ref<void ()>::operator()() const /home/chuanqi.xcq/clangir/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#52 0x00000000087fcf4a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/chuanqi.xcq/clangir/llvm/lib/Support/CrashRecoveryContext.cpp:427:3
#53 0x0000000009b5202b clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/chuanqi.xcq/clangir/clang/lib/Driver/Job.cpp:440:7
#54 0x0000000009aed53a clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/chuanqi.xcq/clangir/clang/lib/Driver/Compilation.cpp:199:15
#55 0x0000000009aed747 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/chuanqi.xcq/clangir/clang/lib/Driver/Compilation.cpp:253:13
#56 0x0000000009b07e12 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/chuanqi.xcq/clangir/clang/lib/Driver/Driver.cpp:1927:7
#57 0x0000000006a6dccb clang_main(int, char**, llvm::ToolContext const&) /home/chuanqi.xcq/clangir/clang/tools/driver/driver.cpp:391:9
#58 0x0000000006aa03a5 main /home/chuanqi.xcq/clangir/build_debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#59 0x00007ffff766e192 __libc_start_main (/lib64/libc.so.6+0x28192)
#60 0x0000000006a6c9ee _start (/home/chuanqi.xcq/clangir/build_debug/bin/clang+++0x6a6c9ee)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 19.0.0git ([email protected]:llvm/clangir.git d2e09591657e61669bc9f6ebcbf0064668a23e27)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/chuanqi.xcq/clangir/build_debug/bin
Build config: +unoptimized, +assertions
clang++: error: unable to execute command: Aborted
clang++: note: diagnostic msg: Error generating preprocessed source(s).

The error leads to:

https://github.com/llvm/clangir/blob/eaae025754b5c58f2ede4787d328d79a0a671b94/clang/lib/CIR/CodeGen/CIRGenTypes.cpp#L73-L74

and it leads to:

https://github.com/llvm/clangir/blob/eaae025754b5c58f2ede4787d328d79a0a671b94/clang/lib/CIR/CodeGen/CIRGenBuilder.h#L457-L460

So it looks like we're going to print the name of type and get the attribute from it. Then I get confused. How can we get the attributes from the name of the type?

ChuanqiXu9 avatar May 29 '24 11:05 ChuanqiXu9