brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8d89f41 Raw
76 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -debug-info-kind=standalone -emit-llvm -triple x86_64-apple-darwin %s -o %t2// RUN: cat %t | FileCheck %s -check-prefix=CHECK03// RUN: cat %t | FileCheck %s -check-prefix=CHECK14// RUN: cat %t | FileCheck %s -check-prefix=CHECK25//6// This test ensures that we associate a declaration with the7// definition of the constructor for OuterClass. The declaration is8// necessary so the backend can emit the DW_AT_specification attribute9// for the definition.10 11class Foo;12class OuterClass13{14  static class InnerClass {15  public:16    InnerClass(); // Here createContextChain() generates a limited type for OuterClass.17  } theInnerClass;18// CHECK0: ![[DECL:[0-9]+]] = !DISubprogram(name: "OuterClass"19// CHECK0-SAME: line: [[@LINE+2]]20// CHECK0-SAME: spFlags: 021  OuterClass(const Foo *); // line 1022};23OuterClass::InnerClass OuterClass::theInnerClass; // This toplevel decl causes InnerClass to be generated.24// CHECK0: !DISubprogram(name: "OuterClass"25// CHECK0-SAME: line: [[@LINE+3]]26// CHECK0-SAME: DISPFlagDefinition27// CHECK0-SAME: declaration: ![[DECL]]28OuterClass::OuterClass(const Foo *meta) { } // line 1329 30 31 32 33 34 35class Foo1;36class OuterClass137{38  static class InnerClass1 {39  public:40    InnerClass1();41  } theInnerClass1;42// CHECK1: ![[DECL:[0-9]+]] = !DISubprogram(name: "Bar"43// CHECK1-SAME: line: [[@LINE+2]]44// CHECK1-SAME: spFlags: 045  void Bar(const Foo1 *);46};47OuterClass1::InnerClass1 OuterClass1::theInnerClass1;48// CHECK1: !DISubprogram(name: "Bar"49// CHECK1-SAME: line: [[@LINE+3]]50// CHECK1-SAME: DISPFlagDefinition51// CHECK1-SAME: declaration: ![[DECL]]52void OuterClass1::Bar(const Foo1 *meta) { }53 54 55 56 57 58class Foo2;59class OuterClass260{61  static class InnerClass2 {62  public:63    InnerClass2();64  } theInnerClass2;65// CHECK2: ![[DECL:[0-9]+]] = !DISubprogram(name: "~OuterClass2"66// CHECK2-SAME: line: [[@LINE+2]]67// CHECK2-SAME: spFlags: 068  ~OuterClass2(); // line 1069};70OuterClass2::InnerClass2 OuterClass2::theInnerClass2;71// CHECK4: !DISubprogram(name: "~OuterClass2"72// CHECK4-SAME: line: [[@LINE+3]]73// CHECK4-SAME: DISPFlagDefinition74// CHECK4-SAME: declaration: ![[DECL]]75OuterClass2::~OuterClass2() { }76