brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · d1e8732 Raw
72 lines · cpp
1// clang-format off2// REQUIRES: lld, x863 4// Test lldb finds the correct parent context decl for functions and class methods when icf happens.5// RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -GS- -fno-addrsig -c /Fo%t.obj -- %s6// RUN: lld-link -opt:icf -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb7// RUN: lldb-test symbols --dump-ast %t.exe | FileCheck %s8 9struct A {10  int f1(int x) {11    return x * 2;12  }13};14struct B {15  int f2(int x) {16    return x * 2;17  }18};19namespace N1 {20int f3(void*, int x) {21  return  x * 2;22}23} // namespace N124 25namespace N2 {26namespace N3 {27  int f4(void*, int x) {28    return  x * 2;29  }30} // namespace N331} // namespace N232 33namespace N4 {34  // Same base name as N1::f3 but different namespaces.35  int f3(void*, int x) {36    return x * 2;37  }38  // Same base name as B::f2 but this is in namespace.39  int f2(void*, int x) {40    return x * 2;41  }42} // namespace N443 44 45int main() {46  A a;47  B b;48  return a.f1(1) + b.f2(1) + N1::f3(nullptr, 1) + N2::N3::f4(nullptr, 1) +49         N4::f3(nullptr, 1);50}51 52 53// CHECK:      namespace N1 {54// CHECK-NEXT:     int f3(void *, int x);55// CHECK-NEXT: }56// CHECK-NEXT: namespace N2 {57// CHECK-NEXT:     namespace N3 {58// CHECK-NEXT:         int f4(void *, int x);59// CHECK-NEXT:     }60// CHECK-NEXT: }61// CHECK-NEXT: namespace N4 {62// CHECK-NEXT:     int f3(void *, int x);63// CHECK-NEXT:     int f2(void *, int x);64// CHECK-NEXT: }65// CHECK-NEXT: int main();66// CHECK-NEXT: struct A {67// CHECK-NEXT:     int f1(int);68// CHECK-NEXT: };69// CHECK-NEXT: struct B {70// CHECK-NEXT:     int f2(int);71// CHECK-NEXT: };72