[clang] 30e276d - [clang][PCH] Don't try to create standalone debug-info for types marked nodebug (#123253)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 17 01:35:06 PST 2025
Author: Michael Buch
Date: 2025-01-17T09:35:02Z
New Revision: 30e276d06d3176f145151cea96ab01af0c3e842a
URL: https://github.com/llvm/llvm-project/commit/30e276d06d3176f145151cea96ab01af0c3e842a
DIFF: https://github.com/llvm/llvm-project/commit/30e276d06d3176f145151cea96ab01af0c3e842a.diff
LOG: [clang][PCH] Don't try to create standalone debug-info for types marked nodebug (#123253)
Fixes one of the crashes uncovered by
https://github.com/llvm/llvm-project/pull/118710
`getOrCreateStandaloneType` asserts that a `DIType` was created for the
requested type. If the `Decl` was marked `nodebug`, however, we can't
generate debug-info for it, so we would previously trigger the assert.
For now keep the assertion around and check the `nodebug` at the
callsite.
Added:
clang/test/Modules/gmodules-nodebug.cpp
Modified:
clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp b/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp
index 5447b98d7105e0..02635ce235a12b 100644
--- a/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp
+++ b/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp
@@ -81,6 +81,9 @@ class PCHContainerGenerator : public ASTConsumer {
if (!TD->isCompleteDefinition())
return true;
+ if (D->hasAttr<NoDebugAttr>())
+ return true;
+
QualType QualTy = Ctx.getTypeDeclType(D);
if (!QualTy.isNull() && CanRepresent(QualTy.getTypePtr()))
DI.getOrCreateStandaloneType(QualTy, D->getLocation());
diff --git a/clang/test/Modules/gmodules-nodebug.cpp b/clang/test/Modules/gmodules-nodebug.cpp
new file mode 100644
index 00000000000000..d83103768e838a
--- /dev/null
+++ b/clang/test/Modules/gmodules-nodebug.cpp
@@ -0,0 +1,14 @@
+// REQUIRES: asserts
+
+// RUN: %clang_cc1 -std=c++23 -x c++-header -emit-pch -fmodule-format=obj \
+// RUN: -o %t.pch %s \
+// RUN: -mllvm -debug-only=pchcontainer &>%t-pch.ll
+// RUN: cat %t-pch.ll | FileCheck %s
+
+template<class...>
+using __void_t [[gnu::nodebug]] = void;
+
+__void_t<> func() {}
+
+// CHECK: !DICompileUnit
+// CHECK-NOT: __void_t
More information about the cfe-commits
mailing list