summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-06-22 18:59:11 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-06-22 18:59:11 +0000
commit2b380232c36317f9f6af040b469d59f280213846 (patch)
tree40a22bf2ade946bf65e4abdd8e62202969d84ef6 /llvm/lib/CodeGen
parent295bd43adb9c514c53f6df861ae1c6e97c23a53a (diff)
downloadbcm5719-llvm-2b380232c36317f9f6af040b469d59f280213846.tar.gz
bcm5719-llvm-2b380232c36317f9f6af040b469d59f280213846.zip
DebugInfo: Support (using GNU extensions) for template template parameters and parameter packs
llvm-svn: 184643
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index 4c465435e59..aa308491622 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -1087,7 +1087,8 @@ CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);
addType(ParamDIE, TP.getType());
- addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
+ if (!TP.getName().empty())
+ addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
return ParamDIE;
}
@@ -1099,7 +1100,7 @@ CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV){
if (ParamDIE)
return ParamDIE;
- ParamDIE = new DIE(dwarf::DW_TAG_template_value_parameter);
+ ParamDIE = new DIE(TPV.getTag());
addType(ParamDIE, TPV.getType());
if (!TPV.getName().empty())
addString(ParamDIE, dwarf::DW_AT_name, TPV.getName());
@@ -1115,6 +1116,14 @@ CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV){
// parameter, rather than a pointer to it.
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
addBlock(ParamDIE, dwarf::DW_AT_location, 0, Block);
+ } else if (TPV.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
+ assert(isa<MDString>(Val));
+ addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
+ cast<MDString>(Val)->getString());
+ } else if (TPV.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
+ assert(isa<MDNode>(Val));
+ DIArray A(cast<MDNode>(Val));
+ addTemplateParams(*ParamDIE, A);
}
}
OpenPOWER on IntegriCloud