[LLVMdev] [PATCH] Context of DW_TAG_member

Xi Wang
2011-06-20T17:55:25Z

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