Paul Robinson | b17327d | 2016-04-27 17:37:12 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 -DSETNODEBUG=0 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=YESINFO |
| 2 | // RUN: %clang_cc1 -DSETNODEBUG=1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=NOINFO |
| 3 | |
| 4 | #if SETNODEBUG |
| 5 | #define NODEBUG __attribute__((nodebug)) |
| 6 | #else |
| 7 | #define NODEBUG |
| 8 | #endif |
| 9 | |
| 10 | // Simple global variable declaration and definition. |
| 11 | // Use the declaration so it gets emitted. |
| 12 | NODEBUG int global_int_decl; |
| 13 | NODEBUG int global_int_def = global_int_decl; |
| 14 | // YESINFO-DAG: !DIGlobalVariable(name: "global_int_decl" |
| 15 | // NOINFO-NOT: !DIGlobalVariable(name: "global_int_decl" |
| 16 | // YESINFO-DAG: !DIGlobalVariable(name: "global_int_def" |
| 17 | // NOINFO-NOT: !DIGlobalVariable(name: "global_int_def" |
| 18 | |
| 19 | // Const global variable. Use it so it gets emitted. |
| 20 | NODEBUG static const int const_global_int_def = 1; |
| 21 | void func1(int); |
| 22 | void func2() { func1(const_global_int_def); } |
| 23 | // YESINFO-DAG: !DIGlobalVariable(name: "const_global_int_def" |
| 24 | // NOINFO-NOT: !DIGlobalVariable(name: "const_global_int_def" |
| 25 | |
| 26 | // Global variable with a more involved type. |
| 27 | // If the variable has no debug info, the type should not appear either. |
| 28 | struct S1 { |
| 29 | int a; |
| 30 | int b; |
| 31 | }; |
| 32 | NODEBUG S1 global_struct = { 2, 3 }; |
| 33 | // YESINFO-DAG: !DICompositeType({{.*}} name: "S1" |
| 34 | // NOINFO-NOT: !DICompositeType({{.*}} name: "S1" |
| 35 | // YESINFO-DAG: !DIGlobalVariable(name: "global_struct" |
| 36 | // NOINFO-NOT: !DIGlobalVariable(name: "global_struct" |
| 37 | |
| 38 | // Static data members. Const member needs a use. |
| 39 | struct S2 { |
| 40 | NODEBUG static int static_member; |
| 41 | NODEBUG static const int static_const_member = 4; |
| 42 | }; |
| 43 | int S2::static_member = 5; |
| 44 | int junk = S2::static_const_member; |
| 45 | // YESINFO-DAG: !DIGlobalVariable(name: "static_member" |
| 46 | // NOINFO-NOT: !DIGlobalVariable(name: "static_member" |
| 47 | // YESINFO-DAG: !DIDerivedType({{.*}} name: "static_const_member" |
| 48 | // NOINFO-NOT: !DIDerivedType({{.*}} name: "static_const_member" |
| 49 | |
| 50 | // Function-local static variable. |
| 51 | void func3() { |
| 52 | NODEBUG static int func_local = 6; |
| 53 | } |
| 54 | // YESINFO-DAG: !DIGlobalVariable(name: "func_local" |
| 55 | // NOINFO-NOT: !DIGlobalVariable(name: "func_local" |