Skip to content

Commit 504dd57

Browse files
committed
DebugInfo: Avoid emitting null members for nodebug nested typedefs
Only comes up for CodeView, since it forcibly emits even unused nested typedefs. Part of issue #122350
1 parent 3241d91 commit 504dd57

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1907,8 +1907,8 @@ void CGDebugInfo::CollectRecordNestedType(
19071907
if (isa<InjectedClassNameType>(Ty))
19081908
return;
19091909
SourceLocation Loc = TD->getLocation();
1910-
llvm::DIType *nestedType = getOrCreateType(Ty, getOrCreateFile(Loc));
1911-
elements.push_back(nestedType);
1910+
if (llvm::DIType *nestedType = getOrCreateType(Ty, getOrCreateFile(Loc)))
1911+
elements.push_back(nestedType);
19121912
}
19131913

19141914
void CGDebugInfo::CollectRecordFields(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// RUN: %clang_cc1 -DSETNODEBUG=0 -gcodeview -emit-llvm -std=c++14 -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=YESINFO
2+
// RUN: %clang_cc1 -DSETNODEBUG=1 -gcodeview -emit-llvm -std=c++14 -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=NOINFO
3+
4+
#if SETNODEBUG
5+
#define NODEBUG __attribute__((nodebug))
6+
#else
7+
#define NODEBUG
8+
#endif
9+
10+
struct t1 {
11+
using t2 NODEBUG = void;
12+
};
13+
void func6() {
14+
t1 v1;
15+
}
16+
// YESINFO-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "t2"
17+
// NOINFO: [[ELEMENTS:!.*]] = !{}
18+
// NOINFO: !DICompositeType(tag: DW_TAG_structure_type, name: "t1", {{.*}}, elements: [[ELEMENTS]],
19+
// NOINFO-NOT: !DIDerivedType(tag: DW_TAG_typedef, name: "t2"
20+

0 commit comments

Comments
 (0)