14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DSETNODEBUG=0 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=YESINFO 24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DSETNODEBUG=1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=NOINFO 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if SETNODEBUG 54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#define NODEBUG __attribute__((nodebug)) 64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#define NODEBUG 84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Const global variable. Use it so it gets emitted. 114967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarNODEBUG static const int const_global_int_def = 1; 124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid func1(int); 134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid func2() { func1(const_global_int_def); } 144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DIGlobalVariable(name: "const_global_int_def" 154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DIGlobalVariable(name: "const_global_int_def" 164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Global variable with a more involved type. 184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// If the variable has no debug info, the type should not appear either. 194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S1 { 204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int a; 214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int b; 224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 234967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarNODEBUG S1 global_struct = { 2, 3 }; 244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DICompositeType({{.*}} name: "S1" 254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DICompositeType({{.*}} name: "S1" 264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DIGlobalVariable(name: "global_struct" 274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DIGlobalVariable(name: "global_struct" 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Static data members. Const member needs a use. 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Also the class as a whole needs a use, so that we produce debug info for 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// the entire class (iterating over the members, demonstrably skipping those 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// with 'nodebug'). 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S2 { 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NODEBUG static int static_member; 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NODEBUG static const int static_const_member = 4; 364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint S2::static_member = 5; 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid func3() { 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S2 junk; 404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar func1(S2::static_const_member); 414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DIGlobalVariable(name: "static_member" 434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DIGlobalVariable(name: "static_member" 444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DIDerivedType({{.*}} name: "static_const_member" 454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DIDerivedType({{.*}} name: "static_const_member" 464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Function-local static and auto variables. 484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid func4() { 494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NODEBUG static int static_local = 6; 504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NODEBUG int normal_local = 7; 514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DIGlobalVariable(name: "static_local" 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DIGlobalVariable(name: "static_local" 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// YESINFO-DAG: !DILocalVariable(name: "normal_local" 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINFO-NOT: !DILocalVariable(name: "normal_local" 56