[clang] Turn 'counted_by' into a type attribute and parse it into 'CountAttributedType' (PR #78000)

Nathan Chancellor via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 20 10:59:06 PDT 2024


nathanchance wrote:

I see a crash from an unreachable statement while building the Linux kernel with debug info enabled after this change. A trivial reproducer from `cvise`:

```c
struct {
  int num_counters;
  long value[] __attribute__((__counted_by__(num_counters)));
} agent_send_response_port_num;
```

```
$ clang -g -c -o /dev/null agent.i
type should have been unwrapped!
UNREACHABLE executed at /mnt/nvme/tmp/cvise.DVoC71ctTu/src/clang/lib/CodeGen/CGDebugInfo.cpp:3681!
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: clang -g -c -o /dev/null agent.i
1.	<eof> parser at end of file
 #0 0x0000564a42c9f028 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x534c028)
 #1 0x0000564a42c9cc6e llvm::sys::RunSignalHandlers() (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5349c6e)
 #2 0x0000564a42c1f526 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f91646c5770 (/usr/lib/libc.so.6+0x3c770)
 #4 0x00007f916471632c (/usr/lib/libc.so.6+0x8d32c)
 #5 0x00007f91646c56c8 raise (/usr/lib/libc.so.6+0x3c6c8)
 #6 0x00007f91646ad4b8 abort (/usr/lib/libc.so.6+0x244b8)
 #7 0x0000564a42c2522f (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x52d222f)
 #8 0x0000564a42f3ccf1 (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55e9cf1)
 #9 0x0000564a42f2aeab clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55d7eab)
#10 0x0000564a42f31090 clang::CodeGen::CGDebugInfo::createFieldType(llvm::StringRef, clang::QualType, clang::SourceLocation, clang::AccessSpecifier, unsigned long, unsigned int, llvm::DIFile*, llvm::DIScope*, clang::RecordDecl const*, llvm::MDTupleTypedArrayWrapper<llvm::DINode>) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55de090)
#11 0x0000564a42f31dd2 clang::CodeGen::CGDebugInfo::CollectRecordNormalField(clang::FieldDecl const*, unsigned long, llvm::DIFile*, llvm::SmallVectorImpl<llvm::Metadata*>&, llvm::DIType*, clang::RecordDecl const*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55dedd2)
#12 0x0000564a42f322f8 clang::CodeGen::CGDebugInfo::CollectRecordFields(clang::RecordDecl const*, llvm::DIFile*, llvm::SmallVectorImpl<llvm::Metadata*>&, llvm::DICompositeType*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55df2f8)
#13 0x0000564a42f3765d clang::CodeGen::CGDebugInfo::CreateTypeDefinition(clang::RecordType const*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55e465d)
#14 0x0000564a42f37b3d clang::CodeGen::CGDebugInfo::CreateType(clang::RecordType const*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55e4b3d)
#15 0x0000564a42f3ca03 clang::CodeGen::CGDebugInfo::CreateTypeNode(clang::QualType, llvm::DIFile*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55e9a03)
#16 0x0000564a42f2aeab clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55d7eab)
#17 0x0000564a42f475b4 clang::CodeGen::CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable*, clang::VarDecl const*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x55f45b4)
#18 0x0000564a42ea15fd clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*, bool) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x554e5fd)
#19 0x0000564a42ea2f30 clang::CodeGen::CodeGenModule::EmitTentativeDefinition(clang::VarDecl const*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x554ff30)
#20 0x0000564a44895bd8 clang::Sema::ActOnEndOfTranslationUnit() (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x6f42bd8)
#21 0x0000564a4474bf8e clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x6df8f8e)
#22 0x0000564a447468be clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x6df38be)
#23 0x0000564a438624af clang::FrontendAction::Execute() (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5f0f4af)
#24 0x0000564a437d6efd clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5e83efd)
#25 0x0000564a43929a58 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5fd6a58)
#26 0x0000564a40e6688f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x351388f)
#27 0x0000564a40e63019 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#28 0x0000564a4365bd49 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) Job.cpp:0:0
#29 0x0000564a42c1f2a6 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x52cc2a6)
#30 0x0000564a4365b442 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/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5d08442)
#31 0x0000564a43619fb3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5cc6fb3)
#32 0x0000564a4361a267 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5cc7267)
#33 0x0000564a43637229 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x5ce4229)
#34 0x0000564a40e626c9 clang_main(int, char**, llvm::ToolContext const&) (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x350f6c9)
#35 0x0000564a40e722b7 main (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x351f2b7)
#36 0x00007f91646aecd0 (/usr/lib/libc.so.6+0x25cd0)
#37 0x00007f91646aed8a __libc_start_main (/usr/lib/libc.so.6+0x25d8a)
#38 0x0000564a40e60a25 _start (/home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin/clang-19+0x350da25)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
ClangBuiltLinux clang version 19.0.0git (https://github.com/llvm/llvm-project 3eb9ff30959a670559bcba03d149d4c51bf7c9c9)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/nathan/Dev/tmp/cvise.DVoC71ctTu/install/llvm-bad/bin
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```

```
# bad: [75dfa58ea93aa93b97534906778cb3dd24ba841a] [RemoveDIs][NFC] Rename DPMarker->DbgMarker (#85931)
# good: [e2fa90fa0a4b7950dd0d7fae6933e89c075d0af0] [lldb/API] Add missing `eBroadcastBitSymbolsChanged` to SBTarget (NFC) (#85883)
git bisect start '75dfa58ea93aa93b97534906778cb3dd24ba841a' 'e2fa90fa0a4b7950dd0d7fae6933e89c075d0af0'
# bad: [197f3ecf92b91ad1626307a17edf0761f2e4136b] [flang][OpenMP] lower simple array reductions (#84958)
git bisect bad 197f3ecf92b91ad1626307a17edf0761f2e4136b
# bad: [27df1b23e07009b1450ebb2072abac97e2958b07] [SLPVectorizer] Use TargetFolder (#85800)
git bisect bad 27df1b23e07009b1450ebb2072abac97e2958b07
# good: [f375aff594d97fc9f6cf2cffb502882833c15cdd] [RISCV] Add the CSR names from Smrnmi. (#83370)
git bisect good f375aff594d97fc9f6cf2cffb502882833c15cdd
# bad: [d7e28cd82bd3141093f96f7ce2e7b36f1b115fad] MIPS: Support -m(no-)unaligned-access for r6 (#85174)
git bisect bad d7e28cd82bd3141093f96f7ce2e7b36f1b115fad
# bad: [4a026b5092d77426b70ab299447af4dbd5a012d9] [AMDGCN] Use ZExt when handling indices in insertment element  (#85718)
git bisect bad 4a026b5092d77426b70ab299447af4dbd5a012d9
# bad: [3eb9ff30959a670559bcba03d149d4c51bf7c9c9] Turn 'counted_by' into a type attribute and parse it into 'CountAttributedType' (#78000)
git bisect bad 3eb9ff30959a670559bcba03d149d4c51bf7c9c9
# good: [b2082a98175b0e5356f23bf21d3dc5b76edea390] Revert "[clang-format][NFC] Delete 100+ redundant #include lines in .cpp files"
git bisect good b2082a98175b0e5356f23bf21d3dc5b76edea390
# first bad commit: [3eb9ff30959a670559bcba03d149d4c51bf7c9c9] Turn 'counted_by' into a type attribute and parse it into 'CountAttributedType' (#78000)
```

https://github.com/llvm/llvm-project/pull/78000


More information about the cfe-commits mailing list