http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49130

--- Comment #3 from Tom Tromey <tromey at gcc dot gnu.org> 2011-05-27 16:59:57 
UTC ---
Here is another case:

template<class K, unsigned long l>
class S2
{
};

template<typename T> void f(S2<T, sizeof(T*)>) { }

int main()
{
  S2<double, sizeof(double*)> s;
  f<double> (s);
}


This generates:

 <1><29>: Abbrev Number: 2 (DW_TAG_class_type)
    <2a>   DW_AT_name        : (indirect string, offset: 0x88): S2<double, 4ul> 
    <2e>   DW_AT_byte_size   : 1    
    <2f>   DW_AT_decl_file   : 1    
    <30>   DW_AT_decl_line   : 2    
    <31>   DW_AT_sibling     : <0x45>    
 <2><35>: Abbrev Number: 3 (DW_TAG_template_type_param)
    <36>   DW_AT_name        : K    
    <38>   DW_AT_type        : <0xad>    
 <2><3c>: Abbrev Number: 4 (DW_TAG_template_value_param)
    <3d>   DW_AT_name        : l    
    <3f>   DW_AT_type        : <0xb4>    
    <43>   DW_AT_const_value : 4    


Note that both DW_AT_name and DW_TAG_template_value_param are
incorrect.  The demangler gets it right:

   void f<double>(S2<double, sizeof (double*)>)

Reply via email to