diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-06-05 05:32:23 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-06-05 05:32:23 +0000 |
commit | 5f6e2f4010e1ebbc07231eff7c92e474e8912350 (patch) | |
tree | b2ffa7142b23e591a741fa5bb63d11256cbae74e /test | |
parent | 9adba39460dfa5282b75dbd27db44ccfb4d1f511 (diff) | |
download | clang-5f6e2f4010e1ebbc07231eff7c92e474e8912350.tar.gz |
PR16214: Debug Info: -flimit-debug-info doesn't omit definitions for types used via typedefs
In an effort to make -flimit-debug-info more consistent I over-shot the
mark & made types used via typedefs never produce definitions in the
debug info (even if the type was used in a way that would require a
definition).
The fix for this is to do exactly what I was hoping to do at some point
- plumb the declaration/definition choice through the various layers of
"CreateType" in CGDebugInfo. In this way we can produce declarations
whenever they are sufficient & definitions otherwise - including when
qualifiers are used, for example (discovered in PR14467). This may not
be complete (there may be other types/situations where we need to
propagate the "declaration/definition" choice) but it lays the basic
foundation which we can enhance in future iterations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183296 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGenCXX/debug-info.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/CodeGenCXX/debug-info.cpp b/test/CodeGenCXX/debug-info.cpp index b16c564e73..4085b9ad32 100644 --- a/test/CodeGenCXX/debug-info.cpp +++ b/test/CodeGenCXX/debug-info.cpp @@ -76,3 +76,27 @@ incomplete (*x)[3]; // CHECK: [[INCARRAY]] = {{.*}}metadata [[INCTYPE:![0-9]*]], metadata {{![0-9]*}}, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 0, align 0, offset 0] [from incomplete] // CHECK: [[INCTYPE]] = {{.*}} ; [ DW_TAG_structure_type ] [incomplete]{{.*}} [fwd] } + +namespace pr16214 { +struct a { + int i; +}; + +typedef a at; + +struct b { +}; + +typedef b bt; + +void func() { + at a_inst; + bt *b_ptr_inst; + const bt *b_cnst_ptr_inst; +} + +// CHECK: metadata [[A_MEM:![0-9]*]], i32 0, null, null} ; [ DW_TAG_structure_type ] [a] +// CHECK: [[A_MEM]] = metadata !{metadata [[A_I:![0-9]*]], metadata !{{[0-9]*}}} +// CHECK: [[A_I]] = {{.*}} ; [ DW_TAG_member ] [i] {{.*}} [from int] +// CHECK: ; [ DW_TAG_structure_type ] [b] {{.*}}[fwd] +} |