[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