[cfe-dev] [LLVMdev] [PATCH] Context of DW_TAG_member

Xi Wang xi.wang at gmail.com
Mon Jun 20 10:55:25 PDT 2011


On Jun 20, 2011, at 1:00 PM, Devang Patel wrote:
> On Jun 18, 2011, at 3:14 PM, Xi Wang wrote:
> 
>> Hi,
>> 
>> When generating debugging information for a data member (e.g., a struct field), Clang doesn't set the member's context to the enclosed class/struct/union type --- it currently sets the context to the file instead.  The attached patch corrects this.  Thanks.
> 
> Do you have a test case ?

I guess the following case should be able to demonstrate the problem.

// RUN: %clang_cc1 -emit-llvm -g < %s | grep DW_TAG_member | grep \!3

struct A { int x; } a;

Compile it with -g. `grep DW_TAG_member' should give the line

!5 = metadata !{i32 589837, metadata !2, metadata !"x", metadata !2, i32 2, i64 32, i64 32, i64 0, i32 0, metadata !6} ; [ DW_TAG_member ]

Currently the second entry of the tuple is !2 (the file), which should have been !3 (the struct A).

> Please update createMemberType() directly, instead of creating new overloaded  createMemberType().

You are right.  The ideal fix would be adding a "Context" parameter to createMemberType().  However doing so would require a lot of changes in CGDebugInfo.cpp because most calls to createMemberType (in CGDebugInfo.cpp) do not provide a context at all.  If a large fix sounds ok I will make a new patch.

- xi



More information about the cfe-dev mailing list