diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-08-16 20:40:29 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-08-16 20:40:29 +0000 |
commit | 9eddbbd563629fbb11d5d1840194fa46132ddca4 (patch) | |
tree | 8b9e334d422c0105f5988a8e45784567707cf5b6 /clang/test | |
parent | ab255bb9cf0fd2814c374e3c2ed3fd7ff957ffdc (diff) | |
download | bcm5719-llvm-9eddbbd563629fbb11d5d1840194fa46132ddca4.tar.gz bcm5719-llvm-9eddbbd563629fbb11d5d1840194fa46132ddca4.zip |
DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class
This reduces Clang's .dwo (fission debug info) size by 23% over
Clang+LLVM.
llvm-svn: 188576
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CodeGenCXX/debug-info-class.cpp | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/clang/test/CodeGenCXX/debug-info-class.cpp b/clang/test/CodeGenCXX/debug-info-class.cpp index df2492603e3..76cc1e3e27c 100644 --- a/clang/test/CodeGenCXX/debug-info-class.cpp +++ b/clang/test/CodeGenCXX/debug-info-class.cpp @@ -12,6 +12,32 @@ class B { public: virtual ~B(); }; + +B::~B() { +} + +struct C { + static int s; + virtual ~C(); +}; + +C::~C() { +} + +struct D { + D(); + virtual ~D(); + void func() { + } +}; + +struct E { + E(); + virtual ~E(); + virtual void func() { + } +}; + struct A { int one; static const int HdrSize = 52; @@ -21,6 +47,11 @@ struct A { } }; +void f1() { + D x; + x.func(); + E y; +} int main(int argc, char **argv) { B b; @@ -40,9 +71,20 @@ int main(int argc, char **argv) { // CHECK: DW_TAG_structure_type ] [foo] // CHECK: DW_TAG_class_type ] [bar] // CHECK: DW_TAG_union_type ] [baz] -// CHECK: DW_TAG_structure_type ] [A] -// CHECK: HdrSize // CHECK: DW_TAG_class_type ] [B] // CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] -// CHECK: ![[EXCEPTLOC]] = metadata !{i32 31, -// CHECK: ![[RETLOC]] = metadata !{i32 30, + +// CHECK: [[C:![0-9]*]] = {{.*}} metadata [[C_MEM:![0-9]*]], i32 0, metadata [[C]], null} ; [ DW_TAG_structure_type ] [C] {{.*}} [def] +// CHECK: [[C_MEM]] = metadata !{metadata [[C_VPTR:![0-9]*]], metadata [[C_S:![0-9]*]], metadata [[C_DTOR:![0-9]*]]} +// CHECK: [[C_VPTR]] = {{.*}} ; [ DW_TAG_member ] [_vptr$C] {{.*}} [artificial] +// CHECK: [[C_S]] = {{.*}} ; [ DW_TAG_member ] [s] {{.*}} [static] [from int] +// CHECK: [[C_DTOR]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [~C] + +// CHECK: ; [ DW_TAG_structure_type ] [A] +// CHECK: HdrSize +// CHECK: metadata [[D_MEM:![0-9]*]], i32 0, null} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl] +// CHECK: [[D_MEM]] = metadata !{metadata [[D_FUNC:![0-9]*]]} +// CHECK: [[D_FUNC]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [func] +// CHECK: null, i32 0, null} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl] +// CHECK: ![[EXCEPTLOC]] = metadata !{i32 62, +// CHECK: ![[RETLOC]] = metadata !{i32 61, |