Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -fblocks -debug-info-kind=limited -gcodeview -emit-llvm %s \
      2 // RUN:       -o - -triple=x86_64-pc-win32 -std=c++98 | \
      3 // RUN:    grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | \
      4 // RUN:    FileCheck %s --check-prefix=CHECK --check-prefix=UNQUAL
      5 // RUN: %clang_cc1 -fblocks -debug-info-kind=line-tables-only -gcodeview -emit-llvm %s \
      6 // RUN:       -o - -triple=x86_64-pc-win32 -std=c++98 | \
      7 // RUN:    grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | \
      8 // RUN:    FileCheck %s --check-prefix=CHECK --check-prefix=QUAL
      9 
     10 void freefunc() { }
     11 // CHECK-DAG: "freefunc"
     12 
     13 namespace N {
     14   int b() { return 0; }
     15 // UNQUAL-DAG: "b"
     16 // QUAL-DAG: "N::b"
     17   namespace { void func() { } }
     18 // UNQUAL-DAG: "func"
     19 // QUAL-DAG: "N::`anonymous namespace'::func"
     20 }
     21 
     22 void _c(void) {
     23   N::func();
     24 }
     25 // CHECK-DAG: "_c"
     26 
     27 struct foo {
     28   int operator+(int);
     29   foo(){}
     30 // UNQUAL-DAG: "foo"
     31 // QUAL-DAG: "foo::foo"
     32 
     33   ~foo(){}
     34 // UNQUAL-DAG: "~foo"
     35 // QUAL-DAG: "foo::~foo"
     36 
     37   foo(int i){}
     38 // UNQUAL-DAG: "foo"
     39 // QUAL-DAG: "foo::foo"
     40 
     41   foo(char *q){}
     42 // UNQUAL-DAG: "foo"
     43 // QUAL-DAG: "foo::foo"
     44 
     45   static foo* static_method() { return 0; }
     46 // UNQUAL-DAG: "static_method"
     47 // QUAL-DAG: "foo::static_method"
     48 
     49 };
     50 
     51 void use_foo() {
     52   foo f1, f2(1), f3((char*)0);
     53   foo::static_method();
     54 }
     55 
     56 // UNQUAL-DAG: "operator+"
     57 // QUAL-DAG: "foo::operator+"
     58 int foo::operator+(int a) { return a; }
     59 
     60 // PR17371
     61 struct OverloadedNewDelete {
     62   // __cdecl
     63   void *operator new(__SIZE_TYPE__);
     64   void *operator new[](__SIZE_TYPE__);
     65   void operator delete(void *);
     66   void operator delete[](void *);
     67   // __thiscall
     68   int operator+(int);
     69 };
     70 
     71 void *OverloadedNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
     72 void *OverloadedNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
     73 void OverloadedNewDelete::operator delete(void *) { }
     74 void OverloadedNewDelete::operator delete[](void *) { }
     75 int OverloadedNewDelete::operator+(int x) { return x; };
     76 
     77 // UNQUAL-DAG: "operator new"
     78 // UNQUAL-DAG: "operator new[]"
     79 // UNQUAL-DAG: "operator delete"
     80 // UNQUAL-DAG: "operator delete[]"
     81 // UNQUAL-DAG: "operator+"
     82 // QUAL-DAG: "OverloadedNewDelete::operator new"
     83 // QUAL-DAG: "OverloadedNewDelete::operator new[]"
     84 // QUAL-DAG: "OverloadedNewDelete::operator delete"
     85 // QUAL-DAG: "OverloadedNewDelete::operator delete[]"
     86 // QUAL-DAG: "OverloadedNewDelete::operator+"
     87 
     88 
     89 template <typename T, void (*)(void)>
     90 void fn_tmpl() {}
     91 
     92 template void fn_tmpl<int, freefunc>();
     93 // CHECK-DAG: "fn_tmpl<int,&freefunc>"
     94