[PATCH] D89286: [DebugInfo] Check for templated static data member when adding constant to record static fields
Amy Huang via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 14 14:41:41 PDT 2020
akhuang updated this revision to Diff 298243.
akhuang added a comment.
update test case and add check for dependent values
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D89286/new/
https://reviews.llvm.org/D89286
Files:
clang/lib/CodeGen/CGDebugInfo.cpp
clang/test/CodeGenCXX/debug-info-static-member.cpp
Index: clang/test/CodeGenCXX/debug-info-static-member.cpp
===================================================================
--- clang/test/CodeGenCXX/debug-info-static-member.cpp
+++ clang/test/CodeGenCXX/debug-info-static-member.cpp
@@ -1,6 +1,7 @@
// RUN: %clangxx -target x86_64-unknown-unknown -g %s -emit-llvm -S -o - | FileCheck %s
// RUN: %clangxx -target x86_64-unknown-unknown -g -std=c++98 %s -emit-llvm -S -o - | FileCheck %s
// RUN: %clangxx -target x86_64-unknown-unknown -g -std=c++11 %s -emit-llvm -S -o - | FileCheck %s
+// RUN: %clangxx -target x86_64-unknown-unknown -g -std=c++17 %s -emit-llvm -S -o - | FileCheck %s --check-prefix=CXX17
// RUN: %clang_cc1 -triple x86_64-windows-msvc -gcodeview -debug-info-kind=limited %s -emit-llvm -o - | FileCheck --check-prefix MSVC %s
// PR14471
@@ -45,6 +46,9 @@
// CHECK-NOT: DIFlagFwdDecl
// CHECK-SAME: ){{$}}
// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "static_decl_templ_var"
+// CHECK-SAME: extraData: i32 7
+// CXX17: !DIDerivedType(tag: DW_TAG_member, name: "static_constexpr_decl_templ_var"
+// CXX17-SAME: extraData: i32 8
int C::a = 4;
// CHECK: [[B]] = !DIGlobalVariableExpression(var: [[BV:.*]], expr: !DIExpression())
@@ -133,6 +137,9 @@
template<typename T>
struct static_decl_templ {
static const int static_decl_templ_var = 7;
+#if __cplusplus >= 201703L
+ static constexpr int static_constexpr_decl_templ_var = 8;
+#endif
};
template<typename T>
Index: clang/lib/CodeGen/CGDebugInfo.cpp
===================================================================
--- clang/lib/CodeGen/CGDebugInfo.cpp
+++ clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1415,14 +1415,22 @@
unsigned LineNumber = getLineNumber(Var->getLocation());
StringRef VName = Var->getName();
llvm::Constant *C = nullptr;
- if (Var->getInit()) {
- const APValue *Value = Var->evaluateValue();
- if (Value) {
- if (Value->isInt())
- C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
- if (Value->isFloat())
- C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
- }
+ APValue *Value = nullptr;
+ if (Var->getInit())
+ Value = Var->evaluateValue();
+ else if (auto *TemplateDecl = Var->getInstantiatedFromStaticDataMember()) {
+ // Inline static data members might not have an initialization.
+ // FIXME: Still doesn't get a value if the initialization is dependent.
+ auto *TemplateInit = TemplateDecl->getInit();
+ if (TemplateInit && !TemplateInit->isValueDependent())
+ Value = TemplateDecl->evaluateValue();
+ }
+
+ if (Value) {
+ if (Value->isInt())
+ C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
+ if (Value->isFloat())
+ C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
}
llvm::DINode::DIFlags Flags = getAccessFlag(Var->getAccess(), RD);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89286.298243.patch
Type: text/x-patch
Size: 2919 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201014/f1bbe5f1/attachment-0001.bin>
More information about the cfe-commits
mailing list