[PATCH] D139988: [clang][DebugInfo] Simplify logic to determine DW_AT_default_value for template parameters
Michael Buch via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 15 14:31:39 PST 2022
Michael137 updated this revision to Diff 483348.
Michael137 added a comment.
- Remove now redundant header
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139988/new/
https://reviews.llvm.org/D139988
Files:
clang/lib/CodeGen/CGDebugInfo.cpp
clang/test/CodeGenCXX/debug-info-template-parameter.cpp
Index: clang/test/CodeGenCXX/debug-info-template-parameter.cpp
===================================================================
--- clang/test/CodeGenCXX/debug-info-template-parameter.cpp
+++ clang/test/CodeGenCXX/debug-info-template-parameter.cpp
@@ -7,26 +7,33 @@
// CHECK: DILocalVariable(name: "f1", {{.*}}, type: ![[TEMPLATE_TYPE:[0-9]+]]
// CHECK: [[TEMPLATE_TYPE]] = {{.*}}!DICompositeType({{.*}}, templateParams: ![[F1_TYPE:[0-9]+]]
-// CHECK: [[F1_TYPE]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]], ![[FORTH:[0-9]+]]}
+// CHECK: [[F1_TYPE]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]], ![[FORTH:[0-9]+]], ![[FIFTH:[0-9]+]]}
// CHECK: [[FIRST]] = !DITemplateTypeParameter(name: "T", type: !{{[0-9]*}})
// CHECK: [[SECOND]] = !DITemplateValueParameter(name: "i", type: !{{[0-9]*}}, value: i32 6)
// PRE17: [[THIRD]] = !DITemplateValueParameter(name: "b", type: !{{[0-9]*}}, value: i8 0)
// CXX17: [[THIRD]] = !DITemplateValueParameter(name: "b", type: !{{[0-9]*}}, value: i1 false)
+// CHECK: [[FIFTH]] = !DITemplateTypeParameter(name: "d", type: !{{[0-9]*}})
// CHECK: DILocalVariable(name: "f2", {{.*}}, type: ![[TEMPLATE_TYPE:[0-9]+]]
// CHECK: [[TEMPLATE_TYPE]] = {{.*}}!DICompositeType({{.*}}, templateParams: ![[F2_TYPE:[0-9]+]]
-// CHECK: [[F2_TYPE]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]], ![[FORTH:[0-9]+]]}
+// CHECK: [[F2_TYPE]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]], ![[FORTH:[0-9]+]], ![[FIFTH:[0-9]+]]}
// CHECK: [[FIRST]] = !DITemplateTypeParameter(name: "T", type: !{{[0-9]*}}, defaulted: true)
// CHECK: [[SECOND]] = !DITemplateValueParameter(name: "i", type: !{{[0-9]*}}, defaulted: true, value: i32 3)
// PRE17: [[THIRD]] = !DITemplateValueParameter(name: "b", type: !{{[0-9]*}}, defaulted: true, value: i8 1)
// CXX17: [[THIRD]] = !DITemplateValueParameter(name: "b", type: !{{[0-9]*}}, defaulted: true, value: i1 true)
+// CHECK: [[FIFTH]] = !DITemplateTypeParameter(name: "d", type: !{{[0-9]*}}, defaulted: true)
-template <typename T = char, int i = 3, bool b = true, int x = sizeof(T)>
+template <typename T>
+class bar {
+};
+
+template <typename T = char, int i = 3, bool b = true, int x = sizeof(T),
+ typename d = bar<T>>
class foo {
};
int main() {
- foo<int, 6, false, 3> f1;
+ foo<int, 6, false, 3, double> f1;
foo<> f2;
return 0;
}
Index: clang/lib/CodeGen/CGDebugInfo.cpp
===================================================================
--- clang/lib/CodeGen/CGDebugInfo.cpp
+++ clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1999,35 +1999,23 @@
const TemplateArgument &TA = Args.Args[i];
StringRef Name;
bool defaultParameter = false;
- if (Args.TList)
+ if (Args.TList) {
Name = Args.TList->getParam(i)->getName();
+
+ NamedDecl const *ND = Args.TList->getParam(i);
+ defaultParameter = clang::isSubstitutedDefaultArgument(
+ CGM.getContext(), TA, ND, Args.Args, Args.TList->getDepth());
+ }
+
switch (TA.getKind()) {
case TemplateArgument::Type: {
llvm::DIType *TTy = getOrCreateType(TA.getAsType(), Unit);
-
- if (Args.TList)
- if (auto *templateType =
- dyn_cast_or_null<TemplateTypeParmDecl>(Args.TList->getParam(i)))
- if (templateType->hasDefaultArgument())
- defaultParameter =
- templateType->getDefaultArgument() == TA.getAsType();
-
TemplateParams.push_back(DBuilder.createTemplateTypeParameter(
TheCU, Name, TTy, defaultParameter));
} break;
case TemplateArgument::Integral: {
llvm::DIType *TTy = getOrCreateType(TA.getIntegralType(), Unit);
- if (Args.TList)
- if (auto *templateType = dyn_cast_or_null<NonTypeTemplateParmDecl>(
- Args.TList->getParam(i)))
- if (templateType->hasDefaultArgument() &&
- !templateType->getDefaultArgument()->isValueDependent())
- defaultParameter = llvm::APSInt::isSameValue(
- templateType->getDefaultArgument()->EvaluateKnownConstInt(
- CGM.getContext()),
- TA.getAsIntegral());
-
TemplateParams.push_back(DBuilder.createTemplateValueParameter(
TheCU, Name, TTy, defaultParameter,
llvm::ConstantInt::get(CGM.getLLVMContext(), TA.getAsIntegral())));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139988.483348.patch
Type: text/x-patch
Size: 4359 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221215/9d620021/attachment-0001.bin>
More information about the cfe-commits
mailing list