[LLVMdev] Passing DW_TAG_typedef as the type to DIBuilder's createFunction
Duncan Sands
baldrick at free.fr
Wed Apr 10 04:48:07 PDT 2013
Hi Eric,
On 10/04/13 00:20, Eric Christopher wrote:
> On Tue, Apr 9, 2013 at 1:53 AM, Duncan Sands <baldrick at free.fr> wrote:
>> Hi David, I'm seeing an assertion failure when passing this node
>>
>> !{i32 786454, metadata <badref>, metadata <badref>, metadata !"fn_t", i32
>> 5, i64 0, i64 0, i64 0, i32 0, metadata <badref>} ; [ DW_TAG_typedef ]
>> [fn_t] [line 5, size 0, align 0, offset 0] [from ]
>>
>> as the function type parameter to DIBuilder::createFunction, due to this
>> check
>> in DebugInfo.cpp:
>>
>> 486 DICompositeType Ty = getType();
>> 487 if (!Ty.Verify())
>> 488 return false;
>>
>> Is it in fact wrong to pass a typedef here?
>>
>
> I can't come up with a way that'd be correct, no. You should be using
> createSubroutineType and passing that into the builder. Have example
> code where this is coming up?
OK, it looks like a DW_TAG_typedef node defines a new type. If the original
type is a subroutine type, I don't see why a typedef of it shouldn't be used
anywhere the original could. After all, it is just an alternative name for
the same thing. You clearly have a different mental model of what a typedef
is, but what is it?
Ciao, Duncan.
More information about the llvm-dev
mailing list