Skip to content

Commit 970cc99

Browse files
committed
[clang][DebugInfo] Stop emitting DW_AT_const_value on static member declarations
Since `f07cf5aaf96a70123530239d07c1e655dc91b98d` we emit a definition for any static data member with a constant initializer. That definition will either have a location or constant attached to it. So having the constant on the declaration is redundant. It also helps with the type merging inconsistencies encountered in #68721
1 parent ec47e17 commit 970cc99

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,21 +1677,11 @@ CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, llvm::DIType *RecordTy,
16771677

16781678
unsigned LineNumber = getLineNumber(Var->getLocation());
16791679
StringRef VName = Var->getName();
1680-
llvm::Constant *C = nullptr;
1681-
if (Var->getInit()) {
1682-
const APValue *Value = Var->evaluateValue();
1683-
if (Value) {
1684-
if (Value->isInt())
1685-
C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
1686-
if (Value->isFloat())
1687-
C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
1688-
}
1689-
}
16901680

16911681
llvm::DINode::DIFlags Flags = getAccessFlag(Var->getAccess(), RD);
16921682
auto Align = getDeclAlignIfRequired(Var, CGM.getContext());
16931683
llvm::DIDerivedType *GV = DBuilder.createStaticMemberType(
1694-
RecordTy, VName, VUnit, LineNumber, VTy, Flags, C, Align);
1684+
RecordTy, VName, VUnit, LineNumber, VTy, Flags, /* Val */ nullptr, Align);
16951685
StaticDataMemberCache[Var->getCanonicalDecl()].reset(GV);
16961686
StaticDataMemberDefinitionsToEmit.push_back(Var->getCanonicalDecl());
16971687
return GV;

clang/test/CodeGenCXX/debug-info-static-inline-member.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,32 @@ int main() {
4242
// CHECK-SAME: isLocal: false, isDefinition: true, declaration: ![[INT_DECL:[0-9]+]])
4343

4444
// CHECK: ![[INT_DECL]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_int",
45-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: i32 25)
45+
// CHECK-SAME: flags: DIFlagStaticMember
46+
// CHECK-NOT: extraData:
4647

4748
// CHECK: ![[INT_DECL2:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_int2",
48-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: i32 26)
49+
// CHECK-SAME: flags: DIFlagStaticMember
50+
// CHECK-NOT: extraData:
4951

5052
// CHECK: ![[FLOAT_DECL:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_float",
51-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: float
53+
// CHECK-SAME: flags: DIFlagStaticMember
54+
// CHECK-NOT: extraData:
5255

5356
// CHECK: ![[ENUM_DECL:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_enum",
54-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: i32 -1)
57+
// CHECK-SAME: flags: DIFlagStaticMember
58+
// CHECK-NOT: extraData:
5559

5660
// CHECK: ![[EMPTY_DECL:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_empty",
57-
// CHECK-SAME: flags: DIFlagStaticMember)
61+
// CHECK-SAME: flags: DIFlagStaticMember
62+
// CHECK-NOT: extraData:
5863

5964
// CHECK: ![[IENUM_DECL:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "inline_enum",
60-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: i32 -1)
65+
// CHECK-SAME: flags: DIFlagStaticMember
66+
// CHECK-NOT: extraData:
6167

6268
// CHECK: ![[TEMPLATE_DECL:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "cexpr_template",
63-
// CHECK-SAME: flags: DIFlagStaticMember, extraData: i16 0)
69+
// CHECK-SAME: flags: DIFlagStaticMember
70+
// CHECK-NOT: extraData:
6471

6572
// CHECK: !DIGlobalVariableExpression(var: ![[EMPTY_VAR:[0-9]+]], expr: !DIExpression())
6673
// CHECK: ![[EMPTY_VAR]] = distinct !DIGlobalVariable(name: "cexpr_empty", linkageName:

clang/test/CodeGenCXX/debug-info-static-member.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ int C::a = 4;
6767
// CHECK-NOT: size:
6868
// CHECK-NOT: align:
6969
// CHECK-NOT: offset:
70-
// CHECK-SAME: flags: DIFlagStaticMember,
71-
// CHECK-SAME: extraData: i1 true)
70+
// CHECK-SAME: flags: DIFlagStaticMember
71+
// CHECK-NOT: extraData:
7272

7373
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "const_b"
7474
// CHECK-NOT: size:
7575
// CHECK-NOT: align:
7676
// CHECK-NOT: offset:
77-
// CHECK-SAME: flags: DIFlagProtected | DIFlagStaticMember,
78-
// CHECK-SAME: extraData: float 0x{{.*}})
77+
// CHECK-SAME: flags: DIFlagProtected | DIFlagStaticMember
78+
// CHECK-NOT: extraData:
7979

8080
// CHECK: ![[DECL_C:[0-9]+]] = !DIDerivedType(tag: DW_TAG_member, name: "c"
8181
// CHECK-NOT: size:
@@ -87,8 +87,8 @@ int C::a = 4;
8787
// CHECK-NOT: size:
8888
// CHECK-NOT: align:
8989
// CHECK-NOT: offset:
90-
// CHECK-SAME: flags: DIFlagPublic | DIFlagStaticMember,
91-
// CHECK-SAME: extraData: i32 18)
90+
// CHECK-SAME: flags: DIFlagPublic | DIFlagStaticMember
91+
// CHECK-NOT: extraData:
9292
//
9393
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "x_a"
9494
// CHECK-SAME: flags: DIFlagPublic | DIFlagStaticMember)
@@ -144,7 +144,7 @@ struct V {
144144
// const_va is not emitted for MS targets.
145145
// NOT-MS: !DIDerivedType(tag: DW_TAG_member, name: "const_va",
146146
// NOT-MS-SAME: line: [[@LINE-5]]
147-
// NOT-MS-SAME: extraData: i32 42
147+
// NOT-MS-NOT: extraData:
148148
const int V::const_va;
149149

150150
namespace x {

0 commit comments

Comments
 (0)