brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 1962b8c Raw
68 lines · cpp
1// RUN: %clang_cc1 -DSETNODEBUG=0 -emit-llvm -std=c++14 -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=YESINFO2// RUN: %clang_cc1 -DSETNODEBUG=1 -emit-llvm -std=c++14 -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=NOINFO3 4#if SETNODEBUG5#define NODEBUG __attribute__((nodebug))6#else7#define NODEBUG8#endif9 10// Const global variable. Use it so it gets emitted.11NODEBUG static const int const_global_int_def = 1;12void func1(int);13void func2() { func1(const_global_int_def); }14// YESINFO-DAG: !DIGlobalVariable(name: "const_global_int_def"15// NOINFO-NOT:  !DIGlobalVariable(name: "const_global_int_def"16 17// Global variable with a more involved type.18// If the variable has no debug info, the type should not appear either.19struct S1 {20  int a;21  int b;22};23NODEBUG S1 global_struct = { 2, 3 };24// YESINFO-DAG: !DICompositeType({{.*}} name: "S1"25// NOINFO-NOT:  !DICompositeType({{.*}} name: "S1"26// YESINFO-DAG: !DIGlobalVariable(name: "global_struct"27// NOINFO-NOT:  !DIGlobalVariable(name: "global_struct"28 29// Static data members. Const member needs a use.30// Also the class as a whole needs a use, so that we produce debug info for31// the entire class (iterating over the members, demonstrably skipping those32// with 'nodebug').33struct S2 {34  NODEBUG static int static_member;35  NODEBUG static const int static_const_member = 4;36};37int S2::static_member = 5;38void func3() {39  S2 junk;40  func1(S2::static_const_member);41}42// YESINFO-DAG: !DIGlobalVariable(name: "static_member"43// NOINFO-NOT:  !DIGlobalVariable(name: "static_member"44// YESINFO-DAG: !DIDerivedType({{.*}} name: "static_const_member"45// NOINFO-NOT:  !DIDerivedType({{.*}} name: "static_const_member"46 47// Function-local static and auto variables.48void func4() {49  NODEBUG static int static_local = 6;50  NODEBUG        int normal_local = 7;51}52// YESINFO-DAG: !DIGlobalVariable(name: "static_local"53// NOINFO-NOT:  !DIGlobalVariable(name: "static_local"54// YESINFO-DAG: !DILocalVariable(name: "normal_local"55// NOINFO-NOT:  !DILocalVariable(name: "normal_local"56 57template <typename T>58using y NODEBUG = int;59void func5() {60  NODEBUG typedef int x;61  x a;62  y<int> b;63}64// YESINFO-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "x"65// NOINFO-NOT:  !DIDerivedType(tag: DW_TAG_typedef, name: "x"66// YESINFO-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "y<int>"67// NOINFO-NOT:  !DIDerivedType(tag: DW_TAG_typedef, name: "y<int>"68