DebugInfo: Support (using GNU extensions) for template template parameters and parameter packs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184643 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/IR/DIBuilder.cpp b/lib/IR/DIBuilder.cpp
index 6c274da..758e7cf 100644
--- a/lib/IR/DIBuilder.cpp
+++ b/lib/IR/DIBuilder.cpp
@@ -530,15 +530,14 @@
return DITemplateTypeParameter(MDNode::get(VMContext, Elts));
}
-/// createTemplateValueParameter - Create debugging information for template
-/// value parameter.
DITemplateValueParameter
-DIBuilder::createTemplateValueParameter(DIDescriptor Context, StringRef Name,
- DIType Ty, Value *Val,
- MDNode *File, unsigned LineNo,
+DIBuilder::createTemplateValueParameter(unsigned Tag, DIDescriptor Context,
+ StringRef Name, DIType Ty,
+ Value *Val, MDNode *File,
+ unsigned LineNo,
unsigned ColumnNo) {
Value *Elts[] = {
- GetTagConstant(VMContext, dwarf::DW_TAG_template_value_parameter),
+ GetTagConstant(VMContext, Tag),
getNonCompileUnitScope(Context),
MDString::get(VMContext, Name),
Ty,
@@ -550,6 +549,38 @@
return DITemplateValueParameter(MDNode::get(VMContext, Elts));
}
+/// createTemplateValueParameter - Create debugging information for template
+/// value parameter.
+DITemplateValueParameter
+DIBuilder::createTemplateValueParameter(DIDescriptor Context, StringRef Name,
+ DIType Ty, Value *Val,
+ MDNode *File, unsigned LineNo,
+ unsigned ColumnNo) {
+ return createTemplateValueParameter(dwarf::DW_TAG_template_value_parameter,
+ Context, Name, Ty, Val, File, LineNo,
+ ColumnNo);
+}
+
+DITemplateValueParameter
+DIBuilder::createTemplateTemplateParameter(DIDescriptor Context, StringRef Name,
+ DIType Ty, StringRef Val,
+ MDNode *File, unsigned LineNo,
+ unsigned ColumnNo) {
+ return createTemplateValueParameter(
+ dwarf::DW_TAG_GNU_template_template_param, Context, Name, Ty,
+ MDString::get(VMContext, Val), File, LineNo, ColumnNo);
+}
+
+DITemplateValueParameter
+DIBuilder::createTemplateParameterPack(DIDescriptor Context, StringRef Name,
+ DIType Ty, DIArray Val,
+ MDNode *File, unsigned LineNo,
+ unsigned ColumnNo) {
+ return createTemplateValueParameter(dwarf::DW_TAG_GNU_template_parameter_pack,
+ Context, Name, Ty, Val, File, LineNo,
+ ColumnNo);
+}
+
/// createClassType - Create debugging information entry for a class.
DICompositeType DIBuilder::createClassType(DIDescriptor Context, StringRef Name,
DIFile File, unsigned LineNumber,
diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp
index 7c23a87..77e29e6 100644
--- a/lib/IR/DebugInfo.cpp
+++ b/lib/IR/DebugInfo.cpp
@@ -292,7 +292,9 @@
/// isTemplateValueParameter - Return true if the specified tag is
/// DW_TAG_template_value_parameter.
bool DIDescriptor::isTemplateValueParameter() const {
- return DbgNode && getTag() == dwarf::DW_TAG_template_value_parameter;
+ return DbgNode && (getTag() == dwarf::DW_TAG_template_value_parameter ||
+ getTag() == dwarf::DW_TAG_GNU_template_template_param ||
+ getTag() == dwarf::DW_TAG_GNU_template_parameter_pack);
}
/// isCompileUnit - Return true if the specified tag is DW_TAG_compile_unit.