[LLVMdev] Associating types directly with debug metadata?

Devang Patel dpatel at apple.com
Thu Sep 30 10:13:44 PDT 2010


On Sep 30, 2010, at 1:30 AM, Pekka Nikander wrote:

>>>> Would the right starting point be to simply add an MDNode pointer to the Type class?  That should be then convertible to a DIType?  
>>> 
>>> We want to avoid any Type class modification. Instead you can use pair in named metadata to match metadata with type.
>>> 
>>> !11 = metadata !{i32 524307, metadata !1, metadata !"T", metadata !1, i32 2, i64 32, i64 32, i64 0, i32 0, null, metadata !12, i32 0, null} ; [ DW_TAG_structure_type ]
>>> 
>>> !21 = metadata !{ metadata !11,  %struct.T %z}
>>> 
>>> !llvm.my_special_type_info = !{!21}
>> 
>> Ok, that approach should work.  Though we want to associate the type, not some variable with the type, i.e. something like
>> 
>> !21 = metadata !{ %struct.T, metadata !11 }
>> 
>> But I don't know if that would be valid syntax...  
> 
> I thought about that more, and I think the "right" way would be to have a syntax like
> 
> !21 = metadata !{ type %struct.T, metadata !11 } 
> 
> or perhaps
> 
> !21 = metadata !{ typeval %struct.T, metadata !11 }
> 
> to avoid the problem with the keyword 'type'.
> 
> But to be able to do that, should apparently be possible to represent types as first class values.  That in turn would apparently require a new Type::TypeID?
> 
> Would that be worth doing?  Apparently we can fake with our need, and use a null pointer instead.  Technically, that would be wrong, but would work with the current code without any modifications:
> 
> !21 = metadata !{ %struct.T *null, metadata !11 }

I would recommend this approach.

-
Devang

> 
> Any opinions?  (I guess I'll just try the number of changes needed for a 'typeval' and report back.)
> 
> --Pekka
> 





More information about the llvm-dev mailing list