================
@@ -5401,6 +5409,8 @@ std::string CGDebugInfo::GetName(const Decl *D, bool 
Qualified) const {
             // feasible some day.
             return TA.getAsIntegral().getBitWidth() <= 64 &&
                    IsReconstitutableType(TA.getIntegralType());
+          case TemplateArgument::StructuralValue:
+            return false;
----------------
dwblaikie wrote:

I did finally take a look at this - I think the Clang side of things is fine - 
if anything improvements could be made to LLVM to be able to lower constants to 
DWARF for a wider variety of values.
eg: For the `float` example, the IR is:
```
!8 = !DITemplateValueParameter(name: "F", type: !9, value: float 1.000000e+00)
```
But the DWARF backend can't handle the float constant - the handling is in 
`DwarfUnit::constructTemplateValueParameterDIE` (in 
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp) and currently only handles 
ConstantInt (for basic stuff - bools, ints, etc) and GlobalValue (for pointer 
non-type template parameters).

So for these new floats and such, the DWARF doesn't include the value, only the 
type.

GCC uses this encoding, for instance:
```
0x0000002b:     DW_TAG_template_value_parameter [3]   (0x0000001e)
                  DW_AT_name [DW_FORM_string]   ("F")
                  DW_AT_type [DW_FORM_ref4]     (cu + 0x004d => {0x0000004d} 
"float")
                  DW_AT_const_value [DW_FORM_block1]    (<0x04> 00 00 80 3f )
```

https://github.com/llvm/llvm-project/pull/78041
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to