// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -gcodeview -emit-llvm %s \
// RUN:       -o - -triple=x86_64-pc-win32 -std=c++98 | \
// RUN:    grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | \
// RUN:    FileCheck %s --check-prefix=CHECK --check-prefix=UNQUAL
// RUN: %clang_cc1 -fblocks -debug-info-kind=line-tables-only -gcodeview -emit-llvm %s \
// RUN:       -o - -triple=x86_64-pc-win32 -std=c++98 | \
// RUN:    grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | \
// RUN:    FileCheck %s --check-prefix=CHECK --check-prefix=QUAL

void freefunc() { }
// CHECK-DAG: "freefunc"

namespace N {
  int b() { return 0; }
// UNQUAL-DAG: "b"
// QUAL-DAG: "N::b"
  namespace { void func() { } }
// UNQUAL-DAG: "func"
// QUAL-DAG: "N::`anonymous namespace'::func"
}

void _c(void) {
  N::func();
}
// CHECK-DAG: "_c"

struct foo {
  int operator+(int);
  foo(){}
// UNQUAL-DAG: "foo"
// QUAL-DAG: "foo::foo"

  ~foo(){}
// UNQUAL-DAG: "~foo"
// QUAL-DAG: "foo::~foo"

  foo(int i){}
// UNQUAL-DAG: "foo"
// QUAL-DAG: "foo::foo"

  foo(char *q){}
// UNQUAL-DAG: "foo"
// QUAL-DAG: "foo::foo"

  static foo* static_method() { return 0; }
// UNQUAL-DAG: "static_method"
// QUAL-DAG: "foo::static_method"

};

void use_foo() {
  foo f1, f2(1), f3((char*)0);
  foo::static_method();
}

// UNQUAL-DAG: "operator+"
// QUAL-DAG: "foo::operator+"
int foo::operator+(int a) { return a; }

// PR17371
struct OverloadedNewDelete {
  // __cdecl
  void *operator new(__SIZE_TYPE__);
  void *operator new[](__SIZE_TYPE__);
  void operator delete(void *);
  void operator delete[](void *);
  // __thiscall
  int operator+(int);
};

void *OverloadedNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
void *OverloadedNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
void OverloadedNewDelete::operator delete(void *) { }
void OverloadedNewDelete::operator delete[](void *) { }
int OverloadedNewDelete::operator+(int x) { return x; };

// UNQUAL-DAG: "operator new"
// UNQUAL-DAG: "operator new[]"
// UNQUAL-DAG: "operator delete"
// UNQUAL-DAG: "operator delete[]"
// UNQUAL-DAG: "operator+"
// QUAL-DAG: "OverloadedNewDelete::operator new"
// QUAL-DAG: "OverloadedNewDelete::operator new[]"
// QUAL-DAG: "OverloadedNewDelete::operator delete"
// QUAL-DAG: "OverloadedNewDelete::operator delete[]"
// QUAL-DAG: "OverloadedNewDelete::operator+"


template <typename T, void (*)(void)>
void fn_tmpl() {}

template void fn_tmpl<int, freefunc>();
// CHECK-DAG: "fn_tmpl<int,&freefunc>"
