head	1.1;
branch	1.1.1;
access;
symbols
	netbsd-11-0-RC4:1.1.1.11
	netbsd-11-0-RC3:1.1.1.11
	netbsd-11-0-RC2:1.1.1.11
	netbsd-11-0-RC1:1.1.1.11
	perseant-exfatfs-base-20250801:1.1.1.11
	netbsd-11:1.1.1.11.0.10
	netbsd-11-base:1.1.1.11
	netbsd-10-1-RELEASE:1.1.1.11
	perseant-exfatfs-base-20240630:1.1.1.11
	perseant-exfatfs:1.1.1.11.0.8
	perseant-exfatfs-base:1.1.1.11
	netbsd-8-3-RELEASE:1.1.1.8
	netbsd-9-4-RELEASE:1.1.1.10
	netbsd-10-0-RELEASE:1.1.1.11
	netbsd-10-0-RC6:1.1.1.11
	netbsd-10-0-RC5:1.1.1.11
	netbsd-10-0-RC4:1.1.1.11
	netbsd-10-0-RC3:1.1.1.11
	netbsd-10-0-RC2:1.1.1.11
	netbsd-10-0-RC1:1.1.1.11
	netbsd-10:1.1.1.11.0.6
	netbsd-10-base:1.1.1.11
	netbsd-9-3-RELEASE:1.1.1.10
	cjep_sun2x:1.1.1.11.0.4
	cjep_sun2x-base:1.1.1.11
	cjep_staticlib_x-base1:1.1.1.11
	netbsd-9-2-RELEASE:1.1.1.10
	cjep_staticlib_x:1.1.1.11.0.2
	cjep_staticlib_x-base:1.1.1.11
	netbsd-9-1-RELEASE:1.1.1.10
	phil-wifi-20200421:1.1.1.11
	phil-wifi-20200411:1.1.1.11
	phil-wifi-20200406:1.1.1.11
	netbsd-8-2-RELEASE:1.1.1.8
	netbsd-9-0-RELEASE:1.1.1.10
	netbsd-9-0-RC2:1.1.1.10
	netbsd-9-0-RC1:1.1.1.10
	netbsd-9:1.1.1.10.0.2
	netbsd-9-base:1.1.1.10
	phil-wifi-20190609:1.1.1.10
	netbsd-8-1-RELEASE:1.1.1.8
	netbsd-8-1-RC1:1.1.1.8
	pgoyette-compat-merge-20190127:1.1.1.9.2.1
	pgoyette-compat-20190127:1.1.1.10
	pgoyette-compat-20190118:1.1.1.10
	pgoyette-compat-1226:1.1.1.10
	pgoyette-compat-1126:1.1.1.10
	pgoyette-compat-1020:1.1.1.10
	pgoyette-compat-0930:1.1.1.10
	pgoyette-compat-0906:1.1.1.10
	netbsd-7-2-RELEASE:1.1.1.5.2.1
	pgoyette-compat-0728:1.1.1.10
	clang-337282:1.1.1.10
	netbsd-8-0-RELEASE:1.1.1.8
	phil-wifi:1.1.1.9.0.4
	phil-wifi-base:1.1.1.9
	pgoyette-compat-0625:1.1.1.9
	netbsd-8-0-RC2:1.1.1.8
	pgoyette-compat-0521:1.1.1.9
	pgoyette-compat-0502:1.1.1.9
	pgoyette-compat-0422:1.1.1.9
	netbsd-8-0-RC1:1.1.1.8
	pgoyette-compat-0415:1.1.1.9
	pgoyette-compat-0407:1.1.1.9
	pgoyette-compat-0330:1.1.1.9
	pgoyette-compat-0322:1.1.1.9
	pgoyette-compat-0315:1.1.1.9
	netbsd-7-1-2-RELEASE:1.1.1.5.2.1
	pgoyette-compat:1.1.1.9.0.2
	pgoyette-compat-base:1.1.1.9
	netbsd-7-1-1-RELEASE:1.1.1.5.2.1
	clang-319952:1.1.1.9
	matt-nb8-mediatek:1.1.1.8.0.10
	matt-nb8-mediatek-base:1.1.1.8
	clang-309604:1.1.1.9
	perseant-stdc-iso10646:1.1.1.8.0.8
	perseant-stdc-iso10646-base:1.1.1.8
	netbsd-8:1.1.1.8.0.6
	netbsd-8-base:1.1.1.8
	prg-localcount2-base3:1.1.1.8
	prg-localcount2-base2:1.1.1.8
	prg-localcount2-base1:1.1.1.8
	prg-localcount2:1.1.1.8.0.4
	prg-localcount2-base:1.1.1.8
	pgoyette-localcount-20170426:1.1.1.8
	bouyer-socketcan-base1:1.1.1.8
	pgoyette-localcount-20170320:1.1.1.8
	netbsd-7-1:1.1.1.5.2.1.0.6
	netbsd-7-1-RELEASE:1.1.1.5.2.1
	netbsd-7-1-RC2:1.1.1.5.2.1
	clang-294123:1.1.1.8
	netbsd-7-nhusb-base-20170116:1.1.1.5.2.1
	bouyer-socketcan:1.1.1.8.0.2
	bouyer-socketcan-base:1.1.1.8
	clang-291444:1.1.1.8
	pgoyette-localcount-20170107:1.1.1.7
	netbsd-7-1-RC1:1.1.1.5.2.1
	pgoyette-localcount-20161104:1.1.1.7
	netbsd-7-0-2-RELEASE:1.1.1.5.2.1
	localcount-20160914:1.1.1.7
	netbsd-7-nhusb:1.1.1.5.2.1.0.4
	netbsd-7-nhusb-base:1.1.1.5.2.1
	clang-280599:1.1.1.7
	pgoyette-localcount-20160806:1.1.1.7
	pgoyette-localcount-20160726:1.1.1.7
	pgoyette-localcount:1.1.1.7.0.2
	pgoyette-localcount-base:1.1.1.7
	netbsd-7-0-1-RELEASE:1.1.1.5.2.1
	clang-261930:1.1.1.7
	netbsd-7-0:1.1.1.5.2.1.0.2
	netbsd-7-0-RELEASE:1.1.1.5.2.1
	netbsd-7-0-RC3:1.1.1.5.2.1
	netbsd-7-0-RC2:1.1.1.5.2.1
	netbsd-7-0-RC1:1.1.1.5.2.1
	clang-237755:1.1.1.6
	clang-232565:1.1.1.6
	clang-227398:1.1.1.6
	tls-maxphys-base:1.1.1.5
	tls-maxphys:1.1.1.5.0.4
	netbsd-7:1.1.1.5.0.2
	netbsd-7-base:1.1.1.5
	clang-215315:1.1.1.5
	clang-209886:1.1.1.5
	yamt-pagecache:1.1.1.4.0.4
	yamt-pagecache-base9:1.1.1.4
	tls-earlyentropy:1.1.1.4.0.2
	tls-earlyentropy-base:1.1.1.5
	riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.1.1.4
	riastradh-drm2-base3:1.1.1.4
	clang-202566:1.1.1.4
	clang-201163:1.1.1.3
	clang-199312:1.1.1.3
	clang-198450:1.1.1.2
	clang-196603:1.1.1.1
	clang-195771:1.1.1.1
	LLVM:1.1.1;
locks; strict;
comment	@// @;


1.1
date	2013.11.28.14.14.58;	author joerg;	state Exp;
branches
	1.1.1.1;
next	;
commitid	ow8OybrawrB1f3fx;

1.1.1.1
date	2013.11.28.14.14.58;	author joerg;	state Exp;
branches;
next	1.1.1.2;
commitid	ow8OybrawrB1f3fx;

1.1.1.2
date	2014.01.05.15.40.06;	author joerg;	state Exp;
branches;
next	1.1.1.3;
commitid	wh3aCSIWykURqWjx;

1.1.1.3
date	2014.01.15.21.26.09;	author joerg;	state Exp;
branches;
next	1.1.1.4;
commitid	NQXlzzA0SPkc5glx;

1.1.1.4
date	2014.03.04.19.55.42;	author joerg;	state Exp;
branches
	1.1.1.4.2.1
	1.1.1.4.4.1;
next	1.1.1.5;
commitid	29z1hJonZISIXprx;

1.1.1.5
date	2014.05.30.18.14.47;	author joerg;	state Exp;
branches
	1.1.1.5.2.1
	1.1.1.5.4.1;
next	1.1.1.6;
commitid	8q0kdlBlCn09GACx;

1.1.1.6
date	2015.01.29.19.57.35;	author joerg;	state Exp;
branches;
next	1.1.1.7;
commitid	mlISSizlPKvepX7y;

1.1.1.7
date	2016.02.27.22.10.23;	author joerg;	state Exp;
branches
	1.1.1.7.2.1;
next	1.1.1.8;
commitid	tIimz3oDlh1NpBWy;

1.1.1.8
date	2017.01.11.10.40.05;	author joerg;	state Exp;
branches;
next	1.1.1.9;
commitid	CNnUNfII1jgNmxBz;

1.1.1.9
date	2017.08.01.19.34.19;	author joerg;	state Exp;
branches
	1.1.1.9.2.1
	1.1.1.9.4.1;
next	1.1.1.10;
commitid	pMuDy65V0VicSx1A;

1.1.1.10
date	2018.07.17.18.31.28;	author joerg;	state Exp;
branches;
next	1.1.1.11;
commitid	wDzL46ALjrCZgwKA;

1.1.1.11
date	2019.11.13.22.20.15;	author joerg;	state dead;
branches;
next	;
commitid	QD8YATxuNG34YJKB;

1.1.1.4.2.1
date	2014.08.10.07.08.14;	author tls;	state Exp;
branches;
next	;
commitid	t01A1TLTYxkpGMLx;

1.1.1.4.4.1
date	2014.03.04.19.55.42;	author yamt;	state dead;
branches;
next	1.1.1.4.4.2;
commitid	WSrDtL5nYAUyiyBx;

1.1.1.4.4.2
date	2014.05.22.16.18.56;	author yamt;	state Exp;
branches;
next	;
commitid	WSrDtL5nYAUyiyBx;

1.1.1.5.2.1
date	2015.06.04.20.04.34;	author snj;	state Exp;
branches;
next	;
commitid	yRnjq9fueSo6n9oy;

1.1.1.5.4.1
date	2014.05.30.18.14.47;	author tls;	state dead;
branches;
next	1.1.1.5.4.2;
commitid	jTnpym9Qu0o4R1Nx;

1.1.1.5.4.2
date	2014.08.19.23.47.58;	author tls;	state Exp;
branches;
next	;
commitid	jTnpym9Qu0o4R1Nx;

1.1.1.7.2.1
date	2017.03.20.06.52.59;	author pgoyette;	state Exp;
branches;
next	;
commitid	jjw7cAwgyKq7RfKz;

1.1.1.9.2.1
date	2018.07.28.04.33.42;	author pgoyette;	state Exp;
branches;
next	;
commitid	1UP1xAIUxv1ZgRLA;

1.1.1.9.4.1
date	2019.06.10.21.45.52;	author christos;	state Exp;
branches;
next	1.1.1.9.4.2;
commitid	jtc8rnCzWiEEHGqB;

1.1.1.9.4.2
date	2020.04.13.07.47.29;	author martin;	state dead;
branches;
next	;
commitid	X01YhRUPVUDaec4C;


desc
@@


1.1
log
@Initial revision
@
text
@// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-pc-win32 -std=c++11 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -cxx-abi microsoft -triple=x86_64-pc-win32 -std=c++11| FileCheck -check-prefix X64 %s

int a;
// CHECK-DAG: @@"\01?a@@@@3HA"

namespace N {
  int b;
// CHECK-DAG: @@"\01?b@@N@@@@3HA"

  namespace {
    int anonymous;
// CHECK-DAG: @@"\01?anonymous@@?A@@N@@@@3HA"
  }
}

static int c;
// CHECK-DAG: @@c

int _c(void) {return N::anonymous + c;}
// CHECK-DAG: @@"\01?_c@@@@YAHXZ"
// X64-DAG:   @@"\01?_c@@@@YAHXZ"

class foo {
  static const short d;
// CHECK-DAG: @@"\01?d@@foo@@@@0FB"
protected:
  static volatile long e;
// CHECK-DAG: @@"\01?e@@foo@@@@1JC"
public:
  static const volatile char f;
// CHECK-DAG: @@"\01?f@@foo@@@@2DD"
  int operator+(int a);
  foo(){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@XZ"

  ~foo(){}
// CHECK-DAG: @@"\01??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??1foo@@@@QEAA@@XZ

  foo(int i){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@H@@Z"

  foo(char *q){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@PEAD@@Z"

  static foo* static_method() { return 0; }

}f,s1(1),s2((char*)0);

typedef foo (foo2);

struct bar {
  static int g;
};

union baz {
  int a;
  char b;
  double c;
};

enum quux {
  qone,
  qtwo,
  qthree
};

foo bar() { return foo(); }
// CHECK-DAG: @@"\01?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"\01?bar@@@@YA?AVfoo@@@@XZ"

int foo::operator+(int a) {
// CHECK-DAG: @@"\01??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"\01??Hfoo@@@@QEAAHH@@Z"

  foo::static_method();
// CHECK-DAG: @@"\01?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"\01?static_method@@foo@@@@SAPEAV1@@XZ"
  bar();
  return a;
}

const short foo::d = 0;
volatile long foo::e;
const volatile char foo::f = 'C';

int bar::g;
// CHECK-DAG: @@"\01?g@@bar@@@@2HA"

extern int * const h1 = &a;
// CHECK-DAG: @@"\01?h1@@@@3QAHA"
extern const int * const h2 = &a;
// CHECK-DAG: @@"\01?h2@@@@3QBHB"

int i[10][20];
// CHECK-DAG: @@"\01?i@@@@3PAY0BE@@HA"

int (__stdcall *j)(signed char, unsigned char);
// CHECK-DAG: @@"\01?j@@@@3P6GHCE@@ZA"

const volatile char foo2::*k;
// CHECK-DAG: @@"\01?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"\01?k@@@@3PETfoo@@@@DET1@@"

int (foo2::*l)(int);
// CHECK-DAG: @@"\01?l@@@@3P8foo@@@@AEHH@@ZQ1@@"

// Static functions are mangled, too.
// Also make sure calling conventions, arglists, and throw specs work.
static void __stdcall alpha(float a, double b) throw() {}
bool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) {
// CHECK-DAG: @@"\01?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"\01?beta@@@@YA_N_J_W@@Z"
  alpha(0.f, 0.0);
  return false;
}

// CHECK-DAG: @@"\01?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"\01?alpha@@@@YAXMN@@Z"

// Make sure tag-type mangling works.
void gamma(class foo, struct bar, union baz, enum quux) {}
// CHECK-DAG: @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"

// Make sure pointer/reference-type mangling works.
void delta(int * const a, const long &) {}
// CHECK-DAG: @@"\01?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"\01?delta@@@@YAXQEAHAEBJ@@Z"

// Array mangling.
void epsilon(int a[][10][20]) {}
// CHECK-DAG: @@"\01?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"\01?epsilon@@@@YAXQEAY19BE@@H@@Z"

void zeta(int (*)(int, int)) {}
// CHECK-DAG: @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"

// Blocks mangling (Clang extension). A block should be mangled slightly
// differently from a similar function pointer.
void eta(int (^)(int, int)) {}
// CHECK-DAG: @@"\01?eta@@@@YAXP_EAHHH@@Z@@Z"

typedef int theta_arg(int,int);
void theta(theta_arg^ block) {}
// CHECK-DAG: @@"\01?theta@@@@YAXP_EAHHH@@Z@@Z"

void operator_new_delete() {
  char *ptr = new char;
// CHECK-DAG: @@"\01??2@@YAPAXI@@Z"

  delete ptr;
// CHECK-DAG: @@"\01??3@@YAXPAX@@Z"

  char *array = new char[42];
// CHECK-DAG: @@"\01??_U@@YAPAXI@@Z"

  delete [] array;
// CHECK-DAG: @@"\01??_V@@YAXPAX@@Z"
}

// PR13022
void (redundant_parens)();
void redundant_parens_use() { redundant_parens(); }
// CHECK-DAG: @@"\01?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"\01?redundant_parens@@@@YAXXZ"

// PR13047
typedef double RGB[3];
RGB color1;
// CHECK-DAG: @@"\01?color1@@@@3PANA"
extern const RGB color2 = {};
// CHECK-DAG: @@"\01?color2@@@@3QBNB"
extern RGB const color3[5] = {};
// CHECK-DAG: @@"\01?color3@@@@3QAY02$$CBNA"
extern RGB const ((color4)[5]) = {};
// CHECK-DAG: @@"\01?color4@@@@3QAY02$$CBNA"

struct B;
volatile int B::* volatile memptr1;
// X64-DAG: @@"\01?memptr1@@@@3RESB@@@@HES1@@"
volatile int B::* memptr2;
// X64-DAG: @@"\01?memptr2@@@@3PESB@@@@HES1@@"
int B::* volatile memptr3;
// X64-DAG: @@"\01?memptr3@@@@3REQB@@@@HEQ1@@"
typedef int (*fun)();
volatile fun B::* volatile funmemptr1;
// X64-DAG: @@"\01?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
volatile fun B::* funmemptr2;
// X64-DAG: @@"\01?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
fun B::* volatile funmemptr3;
// X64-DAG: @@"\01?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
void (B::* volatile memptrtofun1)();
// X64-DAG: @@"\01?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
const void (B::* memptrtofun2)();
// X64-DAG: @@"\01?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
volatile void (B::* memptrtofun3)();
// X64-DAG: @@"\01?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
int (B::* volatile memptrtofun4)();
// X64-DAG: @@"\01?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
volatile int (B::* memptrtofun5)();
// X64-DAG: @@"\01?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
const int (B::* memptrtofun6)();
// X64-DAG: @@"\01?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
fun (B::* volatile memptrtofun7)();
// X64-DAG: @@"\01?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
volatile fun (B::* memptrtofun8)();
// X64-DAG: @@"\01?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
const fun (B::* memptrtofun9)();
// X64-DAG: @@"\01?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"

// PR12603
enum E {};
// CHECK-DAG: "\01?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "\01?fooE@@@@YA?AW4E@@@@XZ"
E fooE() { return E(); }

class X {};
// CHECK-DAG: "\01?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "\01?fooX@@@@YA?AVX@@@@XZ"
X fooX() { return X(); }

namespace PR13182 {
  extern char s0[];
  // CHECK-DAG: @@"\01?s0@@PR13182@@@@3PADA"
  extern char s1[42];
  // CHECK-DAG: @@"\01?s1@@PR13182@@@@3PADA"
  extern const char s2[];
  // CHECK-DAG: @@"\01?s2@@PR13182@@@@3QBDB"
  extern const char s3[42];
  // CHECK-DAG: @@"\01?s3@@PR13182@@@@3QBDB"
  extern volatile char s4[];
  // CHECK-DAG: @@"\01?s4@@PR13182@@@@3RCDC"
  extern const volatile char s5[];
  // CHECK-DAG: @@"\01?s5@@PR13182@@@@3SDDD"
  extern const char* const* s6;
  // CHECK-DAG: @@"\01?s6@@PR13182@@@@3PBQBDB"

  char foo() {
    return s0[0] + s1[0] + s2[0] + s3[0] + s4[0] + s5[0] + s6[0][0];
  }
}

extern "C" inline void extern_c_func() {
  static int local;
// CHECK-DAG: @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
}

void call_extern_c_func() {
  extern_c_func();
}

int main() { return 0; }
// CHECK-DAG: @@main
// X64-DAG:   @@main

int wmain() { return 0; }
// CHECK-DAG: @@wmain
// X64-DAG:   @@wmain

int WinMain() { return 0; }
// CHECK-DAG: @@WinMain
// X64-DAG:   @@WinMain

int wWinMain() { return 0; }
// CHECK-DAG: @@wWinMain
// X64-DAG:   @@wWinMain

int DllMain() { return 0; }
// CHECK-DAG: @@DllMain
// X64-DAG:   @@DllMain

inline int inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_inline_function = { 20 }, second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"

  return static_variable_in_inline_function.a_field + second_static.a_field;
}

int call_inline_function_with_local_type() {
  return inline_function_with_local_type();
}

template <typename T>
inline int templated_inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_templated_inline_function = { 20 },
    second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"

  return static_variable_in_templated_inline_function.a_field +
         second_static.a_field;
}

int call_templated_inline_function_with_local_type() {
  return templated_inline_function_with_local_type<int>();
}

// 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; };

// CHECK-DAG: ??2OverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UOverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3OverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VOverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??HOverloadedNewDelete@@@@QAEHH@@Z

// X64-DAG:   ??2OverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??_UOverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??3OverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??_VOverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??HOverloadedNewDelete@@@@QEAAHH@@Z

// Indirecting the function type through a typedef will require a calling
// convention adjustment before building the method decl.

typedef void *__thiscall OperatorNewType(__SIZE_TYPE__);
typedef void __thiscall OperatorDeleteType(void *);

struct TypedefNewDelete {
  OperatorNewType operator new;
  OperatorNewType operator new[];
  OperatorDeleteType operator delete;
  OperatorDeleteType operator delete[];
};

void *TypedefNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
void *TypedefNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
void TypedefNewDelete::operator delete(void *) { }
void TypedefNewDelete::operator delete[](void *) { }

// CHECK-DAG: ??2TypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UTypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3TypedefNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VTypedefNewDelete@@@@SAXPAX@@Z

namespace PR18022 {

struct { } a;
decltype(a) fun(decltype(a) x, decltype(a)) { return x; }
// CHECK-DAG: ?fun@@PR18022@@@@YA?AU<unnamed-type-a>@@1@@U21@@0@@Z

}
@


1.1.1.1
log
@Import Clang 3.4rc1 r195771.
@
text
@@


1.1.1.2
log
@Import clang 3.5svn r198450.
@
text
@a248 81
namespace EnumMangling {
  extern enum Enum01 { } Enum;
  extern enum Enum02 : bool { } BoolEnum;
  extern enum Enum03 : char { } CharEnum;
  extern enum Enum04 : signed char { } SCharEnum;
  extern enum Enum05 : unsigned char { } UCharEnum;
  extern enum Enum06 : short { } SShortEnum;
  extern enum Enum07 : unsigned short { } UShortEnum;
  extern enum Enum08 : int { } SIntEnum;
  extern enum Enum09 : unsigned int { } UIntEnum;
  extern enum Enum10 : long { } SLongEnum;
  extern enum Enum11 : unsigned long { } ULongEnum;
  extern enum Enum12 : long long { } SLongLongEnum;
  extern enum Enum13 : unsigned long long { } ULongLongEnum;
// CHECK-DAG: @@"\01?Enum@@EnumMangling@@@@3W4Enum01@@1@@A"
// CHECK-DAG: @@"\01?BoolEnum@@EnumMangling@@@@3W4Enum02@@1@@A
// CHECK-DAG: @@"\01?CharEnum@@EnumMangling@@@@3W4Enum03@@1@@A
// CHECK-DAG: @@"\01?SCharEnum@@EnumMangling@@@@3W4Enum04@@1@@A
// CHECK-DAG: @@"\01?UCharEnum@@EnumMangling@@@@3W4Enum05@@1@@A
// CHECK-DAG: @@"\01?SShortEnum@@EnumMangling@@@@3W4Enum06@@1@@A"
// CHECK-DAG: @@"\01?UShortEnum@@EnumMangling@@@@3W4Enum07@@1@@A"
// CHECK-DAG: @@"\01?SIntEnum@@EnumMangling@@@@3W4Enum08@@1@@A"
// CHECK-DAG: @@"\01?UIntEnum@@EnumMangling@@@@3W4Enum09@@1@@A"
// CHECK-DAG: @@"\01?SLongEnum@@EnumMangling@@@@3W4Enum10@@1@@A"
// CHECK-DAG: @@"\01?ULongEnum@@EnumMangling@@@@3W4Enum11@@1@@A"
// CHECK-DAG: @@"\01?SLongLongEnum@@EnumMangling@@@@3W4Enum12@@1@@A"
// CHECK-DAG: @@"\01?ULongLongEnum@@EnumMangling@@@@3W4Enum13@@1@@A"
  decltype(Enum) *UseEnum() { return &Enum; }
  decltype(BoolEnum) *UseBoolEnum() { return &BoolEnum; }
  decltype(CharEnum) *UseCharEnum() { return &CharEnum; }
  decltype(SCharEnum) *UseSCharEnum() { return &SCharEnum; }
  decltype(UCharEnum) *UseUCharEnum() { return &UCharEnum; }
  decltype(SShortEnum) *UseSShortEnum() { return &SShortEnum; }
  decltype(UShortEnum) *UseUShortEnum() { return &UShortEnum; }
  decltype(SIntEnum) *UseSIntEnum() { return &SIntEnum; }
  decltype(UIntEnum) *UseUIntEnum() { return &UIntEnum; }
  decltype(SLongEnum) *UseSLongEnum() { return &SLongEnum; }
  decltype(ULongEnum) *UseULongEnum() { return &ULongEnum; }
  decltype(SLongLongEnum) *UseSLongLongEnum() { return &SLongLongEnum; }
  decltype(ULongLongEnum) *UseULongLongEnum() { return &ULongLongEnum; }
  extern enum class EnumClass01 { } EnumClass;
  extern enum class EnumClass02 : bool { } BoolEnumClass;
  extern enum class EnumClass03 : char { } CharEnumClass;
  extern enum class EnumClass04 : signed char { } SCharEnumClass;
  extern enum class EnumClass05 : unsigned char { } UCharEnumClass;
  extern enum class EnumClass06 : short { } SShortEnumClass;
  extern enum class EnumClass07 : unsigned short { } UShortEnumClass;
  extern enum class EnumClass08 : int { } SIntEnumClass;
  extern enum class EnumClass09 : unsigned int { } UIntEnumClass;
  extern enum class EnumClass10 : long { } SLongEnumClass;
  extern enum class EnumClass11 : unsigned long { } ULongEnumClass;
  extern enum class EnumClass12 : long long { } SLongLongEnumClass;
  extern enum class EnumClass13 : unsigned long long { } ULongLongEnumClass;
// CHECK-DAG: @@"\01?EnumClass@@EnumMangling@@@@3W4EnumClass01@@1@@A"
// CHECK-DAG: @@"\01?BoolEnumClass@@EnumMangling@@@@3W4EnumClass02@@1@@A
// CHECK-DAG: @@"\01?CharEnumClass@@EnumMangling@@@@3W4EnumClass03@@1@@A
// CHECK-DAG: @@"\01?SCharEnumClass@@EnumMangling@@@@3W4EnumClass04@@1@@A
// CHECK-DAG: @@"\01?UCharEnumClass@@EnumMangling@@@@3W4EnumClass05@@1@@A
// CHECK-DAG: @@"\01?SShortEnumClass@@EnumMangling@@@@3W4EnumClass06@@1@@A"
// CHECK-DAG: @@"\01?UShortEnumClass@@EnumMangling@@@@3W4EnumClass07@@1@@A"
// CHECK-DAG: @@"\01?SIntEnumClass@@EnumMangling@@@@3W4EnumClass08@@1@@A"
// CHECK-DAG: @@"\01?UIntEnumClass@@EnumMangling@@@@3W4EnumClass09@@1@@A"
// CHECK-DAG: @@"\01?SLongEnumClass@@EnumMangling@@@@3W4EnumClass10@@1@@A"
// CHECK-DAG: @@"\01?ULongEnumClass@@EnumMangling@@@@3W4EnumClass11@@1@@A"
// CHECK-DAG: @@"\01?SLongLongEnumClass@@EnumMangling@@@@3W4EnumClass12@@1@@A"
// CHECK-DAG: @@"\01?ULongLongEnumClass@@EnumMangling@@@@3W4EnumClass13@@1@@A"
  decltype(EnumClass) *UseEnumClass() { return &EnumClass; }
  decltype(BoolEnumClass) *UseBoolEnumClass() { return &BoolEnumClass; }
  decltype(CharEnumClass) *UseCharEnumClass() { return &CharEnumClass; }
  decltype(SCharEnumClass) *UseSCharEnumClass() { return &SCharEnumClass; }
  decltype(UCharEnumClass) *UseUCharEnumClass() { return &UCharEnumClass; }
  decltype(SShortEnumClass) *UseSShortEnumClass() { return &SShortEnumClass; }
  decltype(UShortEnumClass) *UseUShortEnumClass() { return &UShortEnumClass; }
  decltype(SIntEnumClass) *UseSIntEnumClass() { return &SIntEnumClass; }
  decltype(UIntEnumClass) *UseUIntEnumClass() { return &UIntEnumClass; }
  decltype(SLongEnumClass) *UseSLongEnumClass() { return &SLongEnumClass; }
  decltype(ULongEnumClass) *UseULongEnumClass() { return &ULongEnumClass; }
  decltype(SLongLongEnumClass) *UseSLongLongEnumClass() { return &SLongLongEnumClass; }
  decltype(ULongLongEnumClass) *UseULongLongEnumClass() { return &ULongLongEnumClass; }
}

@


1.1.1.3
log
@Import Clang 3.5svn r199312
@
text
@d1 2
a2 2
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=i386-pc-win32 -std=c++11 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++11| FileCheck -check-prefix X64 %s
@


1.1.1.4
log
@Import Clang 3.5svn r202566.
@
text
@a97 3
extern int * const __restrict h3 = &a;
// CHECK-DAG: @@"\01?h3@@@@3QIAHIA"
// X64-DAG: @@"\01?h3@@@@3QEIAHEIA"
a101 5
typedef int (*FunT)(int, int);
FunT FunArr[10][20];
// CHECK-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"

@


1.1.1.4.2.1
log
@Rebase.
@
text
@d1 2
a2 2
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=i386-pc-win32 -std=c++98 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++98| FileCheck -check-prefix X64 %s
d257 81
d449 7
@


1.1.1.5
log
@Import Clang 3.5svn r209886.
@
text
@d1 2
a2 2
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=i386-pc-win32 -std=c++98 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++98| FileCheck -check-prefix X64 %s
d257 81
d449 7
@


1.1.1.5.2.1
log
@Update LLVM to 3.6.1, requested by joerg in ticket 824.
@
text
@a119 13
// Ensure typedef CV qualifiers are mangled correctly
typedef const int cInt;
typedef volatile int vInt;
typedef const volatile int cvInt;

extern cInt g_cInt = 1;
vInt g_vInt = 2;
cvInt g_cvInt = 3;

// CHECK-DAG: @@"\01?g_cInt@@@@3HB"
// CHECK-DAG: @@"\01?g_vInt@@@@3HC"
// CHECK-DAG: @@"\01?g_cvInt@@@@3HD"

a367 2
void __vectorcall vector_func() { }
// CHECK-DAG: @@"\01?vector_func@@@@YQXXZ"
@


1.1.1.6
log
@Import Clang 3.6RC1 r227398.
@
text
@a119 13
// Ensure typedef CV qualifiers are mangled correctly
typedef const int cInt;
typedef volatile int vInt;
typedef const volatile int cvInt;

extern cInt g_cInt = 1;
vInt g_vInt = 2;
cvInt g_cvInt = 3;

// CHECK-DAG: @@"\01?g_cInt@@@@3HB"
// CHECK-DAG: @@"\01?g_vInt@@@@3HC"
// CHECK-DAG: @@"\01?g_cvInt@@@@3HD"

a367 2
void __vectorcall vector_func() { }
// CHECK-DAG: @@"\01?vector_func@@@@YQXXZ"
@


1.1.1.7
log
@Import Clang 3.8.0rc3 r261930.
@
text
@a23 4
const int &NeedsReferenceTemporary = 2;
// CHECK-DAG: @@"\01?NeedsReferenceTemporary@@@@3ABHB" = constant i32* @@"\01?$RT1@@NeedsReferenceTemporary@@@@3ABHB"
// X64-DAG: @@"\01?NeedsReferenceTemporary@@@@3AEBHEB" = constant i32* @@"\01?$RT1@@NeedsReferenceTemporary@@@@3AEBHEB"

a382 95

template <void (*)(void)>
void fn_tmpl() {}

template void fn_tmpl<extern_c_func>();
// CHECK-DAG: @@"\01??$fn_tmpl@@$1?extern_c_func@@@@YAXXZ@@@@YAXXZ"

extern "C" void __attribute__((overloadable)) overloaded_fn() {}
// CHECK-DAG: @@"\01?overloaded_fn@@@@$$J0YAXXZ"

namespace UnnamedType {
struct S {
  typedef struct {} *T1[1];
  typedef struct {} T2;
  typedef struct {} *T3, T4;
  using T5 = struct {};
  using T6 = struct {} *;
};
void f(S::T1) {}
void f(S::T2) {}
void f(S::T3) {}
void f(S::T4) {}
void f(S::T5) {}
void f(S::T6) {}
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXQAPAU<unnamed-type-T1>@@S@@1@@@@Z"
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXPAUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// CHECK-DAG: @@"\01?f@@UnnamedType@@@@YAXPAU<unnamed-type-T6>@@S@@1@@@@Z"

// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXQEAPEAU<unnamed-type-T1>@@S@@1@@@@Z"
// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXPEAUT4@@S@@1@@@@Z"(%"struct.UnnamedType::S::T4"
// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// X64-DAG: @@"\01?f@@UnnamedType@@@@YAXPEAU<unnamed-type-T6>@@S@@1@@@@Z"
}

namespace PassObjectSize {
// NOTE: This mangling is subject to change.
// Reiterating from the comment in MicrosoftMangle, the scheme is pretend a
// parameter of type __clang::__pass_object_sizeN exists after each pass object
// size param P, where N is the Type of the pass_object_size attribute on P.
//
// e.g. we want to mangle:
//   void foo(void *const __attribute__((pass_object_size(0))));
// as if it were
//   namespace __clang { enum __pass_object_size0 : size_t {}; }
//   void foo(void *const, __clang::__pass_object_size0);
// where __clang is a top-level namespace.

// CHECK-DAG: define i32 @@"\01?foo@@PassObjectSize@@@@YAHQAHW4__pass_object_size0@@__clang@@@@@@Z"
int foo(int *const i __attribute__((pass_object_size(0)))) { return 0; }
// CHECK-DAG: define i32 @@"\01?bar@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@@@Z"
int bar(int *const i __attribute__((pass_object_size(1)))) { return 0; }
// CHECK-DAG: define i32 @@"\01?qux@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@0W4__pass_object_size0@@3@@@@Z"
int qux(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(0)))) { return 0; }
// CHECK-DAG: define i32 @@"\01?zot@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@01@@Z"
int zot(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(1)))) { return 0; }
}

namespace Atomic {
// CHECK-DAG: define void @@"\01?f@@Atomic@@@@YAXU?$_Atomic@@H@@__clang@@@@@@Z"(
void f(_Atomic(int)) {}
}
namespace Complex {
// CHECK-DAG: define void @@"\01?f@@Complex@@@@YAXU?$_Complex@@H@@__clang@@@@@@Z"(
void f(_Complex int) {}
}

namespace PR26029 {
template <class>
struct L {
  L() {}
};
template <class>
class H;
struct M : L<H<int *> > {};

template <class>
struct H {};

template <class GT>
void m_fn3() {
  (H<GT *>());
  M();
}

void runOnFunction() {
  L<H<int *> > b;
  m_fn3<int>();
}
// CHECK-DAG: call {{.*}} @@"\01??0?$L@@V?$H@@PAH@@PR26029@@@@@@PR26029@@@@QAE@@XZ"
}
@


1.1.1.7.2.1
log
@Sync with HEAD
@
text
@a6 5
extern "C++" {
static int __attribute__((used)) ignore_transparent_context;
// CHECK-DAG: @@ignore_transparent_context
}

@


1.1.1.8
log
@Import Clang pre-4.0.0 r291444.
@
text
@a6 5
extern "C++" {
static int __attribute__((used)) ignore_transparent_context;
// CHECK-DAG: @@ignore_transparent_context
}

@


1.1.1.9
log
@Import clang r309604 from branches/release_50
@
text
@a401 7
extern "C" void overloaded_fn2() {}
// CHECK-DAG: @@overloaded_fn2
//
extern "C" void __attribute__((overloadable)) overloaded_fn3();
extern "C" void overloaded_fn3() {}
// CHECK-DAG: @@overloaded_fn3

@


1.1.1.9.4.1
log
@Sync with HEAD
@
text
@d5 1
a5 1
// CHECK-DAG: @@"?a@@@@3HA"
d14 1
a14 1
// CHECK-DAG: @@"?b@@N@@@@3HA"
d18 1
a18 1
// CHECK-DAG: @@"?anonymous@@?A@@N@@@@3HA"
d26 2
a27 2
// CHECK-DAG: @@"?_c@@@@YAHXZ"
// X64-DAG:   @@"?_c@@@@YAHXZ"
d30 2
a31 2
// CHECK-DAG: @@"?NeedsReferenceTemporary@@@@3ABHB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3ABHB"
// X64-DAG: @@"?NeedsReferenceTemporary@@@@3AEBHEB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3AEBHEB"
d35 1
a35 1
// CHECK-DAG: @@"?d@@foo@@@@0FB"
d38 1
a38 1
// CHECK-DAG: @@"?e@@foo@@@@1JC"
d41 1
a41 1
// CHECK-DAG: @@"?f@@foo@@@@2DD"
d44 2
a45 2
// CHECK-DAG: @@"??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"??0foo@@@@QEAA@@XZ"
d48 2
a49 2
// CHECK-DAG: @@"??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"??1foo@@@@QEAA@@XZ
d52 2
a53 2
// CHECK-DAG: @@"??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@H@@Z"
d56 2
a57 2
// CHECK-DAG: @@"??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@PEAD@@Z"
d82 2
a83 2
// CHECK-DAG: @@"?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"?bar@@@@YA?AVfoo@@@@XZ"
d86 2
a87 2
// CHECK-DAG: @@"??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"??Hfoo@@@@QEAAHH@@Z"
d90 2
a91 2
// CHECK-DAG: @@"?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"?static_method@@foo@@@@SAPEAV1@@XZ"
d101 1
a101 1
// CHECK-DAG: @@"?g@@bar@@@@2HA"
d104 1
a104 1
// CHECK-DAG: @@"?h1@@@@3QAHA"
d106 1
a106 1
// CHECK-DAG: @@"?h2@@@@3QBHB"
d108 2
a109 2
// CHECK-DAG: @@"?h3@@@@3QIAHIA"
// X64-DAG: @@"?h3@@@@3QEIAHEIA"
d112 1
a112 1
// CHECK-DAG: @@"?i@@@@3PAY0BE@@HA"
d116 2
a117 2
// CHECK-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
d120 1
a120 1
// CHECK-DAG: @@"?j@@@@3P6GHCE@@ZA"
d123 2
a124 2
// CHECK-DAG: @@"?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"?k@@@@3PETfoo@@@@DET1@@"
d127 1
a127 1
// CHECK-DAG: @@"?l@@@@3P8foo@@@@AEHH@@ZQ1@@"
d138 3
a140 3
// CHECK-DAG: @@"?g_cInt@@@@3HB"
// CHECK-DAG: @@"?g_vInt@@@@3HC"
// CHECK-DAG: @@"?g_cvInt@@@@3HD"
d146 2
a147 2
// CHECK-DAG: @@"?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"?beta@@@@YA_N_J_W@@Z"
d152 2
a153 2
// CHECK-DAG: @@"?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"?alpha@@@@YAXMN@@Z"
d157 2
a158 2
// CHECK-DAG: @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
d162 2
a163 2
// CHECK-DAG: @@"?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"?delta@@@@YAXQEAHAEBJ@@Z"
d167 2
a168 2
// CHECK-DAG: @@"?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"?epsilon@@@@YAXQEAY19BE@@H@@Z"
d171 2
a172 2
// CHECK-DAG: @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
d177 1
a177 1
// CHECK-DAG: @@"?eta@@@@YAXP_EAHHH@@Z@@Z"
d181 1
a181 1
// CHECK-DAG: @@"?theta@@@@YAXP_EAHHH@@Z@@Z"
d185 1
a185 1
// CHECK-DAG: @@"??2@@YAPAXI@@Z"
d188 1
a188 1
// CHECK-DAG: @@"??3@@YAXPAX@@Z"
d191 1
a191 1
// CHECK-DAG: @@"??_U@@YAPAXI@@Z"
d194 1
a194 1
// CHECK-DAG: @@"??_V@@YAXPAX@@Z"
d200 2
a201 2
// CHECK-DAG: @@"?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"?redundant_parens@@@@YAXXZ"
d206 1
a206 1
// CHECK-DAG: @@"?color1@@@@3PANA"
d208 1
a208 1
// CHECK-DAG: @@"?color2@@@@3QBNB"
d210 1
a210 1
// CHECK-DAG: @@"?color3@@@@3QAY02$$CBNA"
d212 1
a212 1
// CHECK-DAG: @@"?color4@@@@3QAY02$$CBNA"
d216 1
a216 1
// X64-DAG: @@"?memptr1@@@@3RESB@@@@HES1@@"
d218 1
a218 1
// X64-DAG: @@"?memptr2@@@@3PESB@@@@HES1@@"
d220 1
a220 1
// X64-DAG: @@"?memptr3@@@@3REQB@@@@HEQ1@@"
d223 1
a223 1
// X64-DAG: @@"?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
d225 1
a225 1
// X64-DAG: @@"?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
d227 1
a227 1
// X64-DAG: @@"?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
d229 1
a229 1
// X64-DAG: @@"?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
d231 1
a231 1
// X64-DAG: @@"?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
d233 1
a233 1
// X64-DAG: @@"?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
d235 1
a235 1
// X64-DAG: @@"?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
d237 1
a237 1
// X64-DAG: @@"?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
d239 1
a239 1
// X64-DAG: @@"?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
d241 1
a241 1
// X64-DAG: @@"?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
d243 1
a243 1
// X64-DAG: @@"?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
d245 1
a245 1
// X64-DAG: @@"?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"
d249 2
a250 2
// CHECK-DAG: "?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "?fooE@@@@YA?AW4E@@@@XZ"
d254 2
a255 2
// CHECK-DAG: "?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "?fooX@@@@YA?AVX@@@@XZ"
d260 1
a260 1
  // CHECK-DAG: @@"?s0@@PR13182@@@@3PADA"
d262 1
a262 1
  // CHECK-DAG: @@"?s1@@PR13182@@@@3PADA"
d264 1
a264 1
  // CHECK-DAG: @@"?s2@@PR13182@@@@3QBDB"
d266 1
a266 1
  // CHECK-DAG: @@"?s3@@PR13182@@@@3QBDB"
d268 1
a268 1
  // CHECK-DAG: @@"?s4@@PR13182@@@@3RCDC"
d270 1
a270 1
  // CHECK-DAG: @@"?s5@@PR13182@@@@3SDDD"
d272 1
a272 1
  // CHECK-DAG: @@"?s6@@PR13182@@@@3PBQBDB"
d281 2
a282 2
// CHECK-DAG: @@"?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"?local@@?1??extern_c_func@@@@9@@4HA"
d313 1
a313 1
  // CHECK: @@"?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"
d328 1
a328 1
  // CHECK: @@"?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"
d391 1
a391 1
// CHECK-DAG: @@"?vector_func@@@@YQXXZ"
d397 1
a397 1
// CHECK-DAG: @@"??$fn_tmpl@@$1?extern_c_func@@@@YAXXZ@@@@YAXXZ"
d400 1
a400 1
// CHECK-DAG: @@"?overloaded_fn@@@@$$J0YAXXZ"
d423 13
a435 13
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXQAPAU<unnamed-type-T1>@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAU<unnamed-type-T6>@@S@@1@@@@Z"

// X64-DAG: @@"?f@@UnnamedType@@@@YAXQEAPEAU<unnamed-type-T1>@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAUT4@@S@@1@@@@Z"(%"struct.UnnamedType::S::T4"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAU<unnamed-type-T6>@@S@@1@@@@Z"
d451 1
a451 1
// CHECK-DAG: define dso_local i32 @@"?foo@@PassObjectSize@@@@YAHQAHW4__pass_object_size0@@__clang@@@@@@Z"
d453 1
a453 1
// CHECK-DAG: define dso_local i32 @@"?bar@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@@@Z"
d455 1
a455 1
// CHECK-DAG: define dso_local i32 @@"?qux@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@0W4__pass_object_size0@@3@@@@Z"
d457 1
a457 1
// CHECK-DAG: define dso_local i32 @@"?zot@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@01@@Z"
d462 1
a462 1
// CHECK-DAG: define dso_local void @@"?f@@Atomic@@@@YAXU?$_Atomic@@H@@__clang@@@@@@Z"(
d466 1
a466 1
// CHECK-DAG: define dso_local void @@"?f@@Complex@@@@YAXU?$_Complex@@H@@__clang@@@@@@Z"(
a468 4
namespace Float16 {
// CHECK-DAG: define dso_local void @@"?f@@Float16@@@@YAXU_Float16@@__clang@@@@@@Z"(
void f(_Float16) {}
}
d492 1
a492 1
// CHECK-DAG: call {{.*}} @@"??0?$L@@V?$H@@PAH@@PR26029@@@@@@PR26029@@@@QAE@@XZ"
@


1.1.1.9.4.2
log
@Mostly merge changes from HEAD upto 20200411
@
text
@@


1.1.1.9.2.1
log
@Sync with HEAD
@
text
@d5 1
a5 1
// CHECK-DAG: @@"?a@@@@3HA"
d14 1
a14 1
// CHECK-DAG: @@"?b@@N@@@@3HA"
d18 1
a18 1
// CHECK-DAG: @@"?anonymous@@?A@@N@@@@3HA"
d26 2
a27 2
// CHECK-DAG: @@"?_c@@@@YAHXZ"
// X64-DAG:   @@"?_c@@@@YAHXZ"
d30 2
a31 2
// CHECK-DAG: @@"?NeedsReferenceTemporary@@@@3ABHB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3ABHB"
// X64-DAG: @@"?NeedsReferenceTemporary@@@@3AEBHEB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3AEBHEB"
d35 1
a35 1
// CHECK-DAG: @@"?d@@foo@@@@0FB"
d38 1
a38 1
// CHECK-DAG: @@"?e@@foo@@@@1JC"
d41 1
a41 1
// CHECK-DAG: @@"?f@@foo@@@@2DD"
d44 2
a45 2
// CHECK-DAG: @@"??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"??0foo@@@@QEAA@@XZ"
d48 2
a49 2
// CHECK-DAG: @@"??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"??1foo@@@@QEAA@@XZ
d52 2
a53 2
// CHECK-DAG: @@"??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@H@@Z"
d56 2
a57 2
// CHECK-DAG: @@"??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@PEAD@@Z"
d82 2
a83 2
// CHECK-DAG: @@"?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"?bar@@@@YA?AVfoo@@@@XZ"
d86 2
a87 2
// CHECK-DAG: @@"??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"??Hfoo@@@@QEAAHH@@Z"
d90 2
a91 2
// CHECK-DAG: @@"?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"?static_method@@foo@@@@SAPEAV1@@XZ"
d101 1
a101 1
// CHECK-DAG: @@"?g@@bar@@@@2HA"
d104 1
a104 1
// CHECK-DAG: @@"?h1@@@@3QAHA"
d106 1
a106 1
// CHECK-DAG: @@"?h2@@@@3QBHB"
d108 2
a109 2
// CHECK-DAG: @@"?h3@@@@3QIAHIA"
// X64-DAG: @@"?h3@@@@3QEIAHEIA"
d112 1
a112 1
// CHECK-DAG: @@"?i@@@@3PAY0BE@@HA"
d116 2
a117 2
// CHECK-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
d120 1
a120 1
// CHECK-DAG: @@"?j@@@@3P6GHCE@@ZA"
d123 2
a124 2
// CHECK-DAG: @@"?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"?k@@@@3PETfoo@@@@DET1@@"
d127 1
a127 1
// CHECK-DAG: @@"?l@@@@3P8foo@@@@AEHH@@ZQ1@@"
d138 3
a140 3
// CHECK-DAG: @@"?g_cInt@@@@3HB"
// CHECK-DAG: @@"?g_vInt@@@@3HC"
// CHECK-DAG: @@"?g_cvInt@@@@3HD"
d146 2
a147 2
// CHECK-DAG: @@"?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"?beta@@@@YA_N_J_W@@Z"
d152 2
a153 2
// CHECK-DAG: @@"?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"?alpha@@@@YAXMN@@Z"
d157 2
a158 2
// CHECK-DAG: @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
d162 2
a163 2
// CHECK-DAG: @@"?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"?delta@@@@YAXQEAHAEBJ@@Z"
d167 2
a168 2
// CHECK-DAG: @@"?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"?epsilon@@@@YAXQEAY19BE@@H@@Z"
d171 2
a172 2
// CHECK-DAG: @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
d177 1
a177 1
// CHECK-DAG: @@"?eta@@@@YAXP_EAHHH@@Z@@Z"
d181 1
a181 1
// CHECK-DAG: @@"?theta@@@@YAXP_EAHHH@@Z@@Z"
d185 1
a185 1
// CHECK-DAG: @@"??2@@YAPAXI@@Z"
d188 1
a188 1
// CHECK-DAG: @@"??3@@YAXPAX@@Z"
d191 1
a191 1
// CHECK-DAG: @@"??_U@@YAPAXI@@Z"
d194 1
a194 1
// CHECK-DAG: @@"??_V@@YAXPAX@@Z"
d200 2
a201 2
// CHECK-DAG: @@"?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"?redundant_parens@@@@YAXXZ"
d206 1
a206 1
// CHECK-DAG: @@"?color1@@@@3PANA"
d208 1
a208 1
// CHECK-DAG: @@"?color2@@@@3QBNB"
d210 1
a210 1
// CHECK-DAG: @@"?color3@@@@3QAY02$$CBNA"
d212 1
a212 1
// CHECK-DAG: @@"?color4@@@@3QAY02$$CBNA"
d216 1
a216 1
// X64-DAG: @@"?memptr1@@@@3RESB@@@@HES1@@"
d218 1
a218 1
// X64-DAG: @@"?memptr2@@@@3PESB@@@@HES1@@"
d220 1
a220 1
// X64-DAG: @@"?memptr3@@@@3REQB@@@@HEQ1@@"
d223 1
a223 1
// X64-DAG: @@"?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
d225 1
a225 1
// X64-DAG: @@"?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
d227 1
a227 1
// X64-DAG: @@"?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
d229 1
a229 1
// X64-DAG: @@"?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
d231 1
a231 1
// X64-DAG: @@"?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
d233 1
a233 1
// X64-DAG: @@"?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
d235 1
a235 1
// X64-DAG: @@"?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
d237 1
a237 1
// X64-DAG: @@"?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
d239 1
a239 1
// X64-DAG: @@"?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
d241 1
a241 1
// X64-DAG: @@"?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
d243 1
a243 1
// X64-DAG: @@"?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
d245 1
a245 1
// X64-DAG: @@"?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"
d249 2
a250 2
// CHECK-DAG: "?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "?fooE@@@@YA?AW4E@@@@XZ"
d254 2
a255 2
// CHECK-DAG: "?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "?fooX@@@@YA?AVX@@@@XZ"
d260 1
a260 1
  // CHECK-DAG: @@"?s0@@PR13182@@@@3PADA"
d262 1
a262 1
  // CHECK-DAG: @@"?s1@@PR13182@@@@3PADA"
d264 1
a264 1
  // CHECK-DAG: @@"?s2@@PR13182@@@@3QBDB"
d266 1
a266 1
  // CHECK-DAG: @@"?s3@@PR13182@@@@3QBDB"
d268 1
a268 1
  // CHECK-DAG: @@"?s4@@PR13182@@@@3RCDC"
d270 1
a270 1
  // CHECK-DAG: @@"?s5@@PR13182@@@@3SDDD"
d272 1
a272 1
  // CHECK-DAG: @@"?s6@@PR13182@@@@3PBQBDB"
d281 2
a282 2
// CHECK-DAG: @@"?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"?local@@?1??extern_c_func@@@@9@@4HA"
d313 1
a313 1
  // CHECK: @@"?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"
d328 1
a328 1
  // CHECK: @@"?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"
d391 1
a391 1
// CHECK-DAG: @@"?vector_func@@@@YQXXZ"
d397 1
a397 1
// CHECK-DAG: @@"??$fn_tmpl@@$1?extern_c_func@@@@YAXXZ@@@@YAXXZ"
d400 1
a400 1
// CHECK-DAG: @@"?overloaded_fn@@@@$$J0YAXXZ"
d423 13
a435 13
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXQAPAU<unnamed-type-T1>@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAU<unnamed-type-T6>@@S@@1@@@@Z"

// X64-DAG: @@"?f@@UnnamedType@@@@YAXQEAPEAU<unnamed-type-T1>@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAUT4@@S@@1@@@@Z"(%"struct.UnnamedType::S::T4"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAU<unnamed-type-T6>@@S@@1@@@@Z"
d451 1
a451 1
// CHECK-DAG: define dso_local i32 @@"?foo@@PassObjectSize@@@@YAHQAHW4__pass_object_size0@@__clang@@@@@@Z"
d453 1
a453 1
// CHECK-DAG: define dso_local i32 @@"?bar@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@@@Z"
d455 1
a455 1
// CHECK-DAG: define dso_local i32 @@"?qux@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@0W4__pass_object_size0@@3@@@@Z"
d457 1
a457 1
// CHECK-DAG: define dso_local i32 @@"?zot@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@01@@Z"
d462 1
a462 1
// CHECK-DAG: define dso_local void @@"?f@@Atomic@@@@YAXU?$_Atomic@@H@@__clang@@@@@@Z"(
d466 1
a466 1
// CHECK-DAG: define dso_local void @@"?f@@Complex@@@@YAXU?$_Complex@@H@@__clang@@@@@@Z"(
a468 4
namespace Float16 {
// CHECK-DAG: define dso_local void @@"?f@@Float16@@@@YAXU_Float16@@__clang@@@@@@Z"(
void f(_Float16) {}
}
d492 1
a492 1
// CHECK-DAG: call {{.*}} @@"??0?$L@@V?$H@@PAH@@PR26029@@@@@@PR26029@@@@QAE@@XZ"
@


1.1.1.10
log
@Import clang r337282 from trunk
@
text
@d5 1
a5 1
// CHECK-DAG: @@"?a@@@@3HA"
d14 1
a14 1
// CHECK-DAG: @@"?b@@N@@@@3HA"
d18 1
a18 1
// CHECK-DAG: @@"?anonymous@@?A@@N@@@@3HA"
d26 2
a27 2
// CHECK-DAG: @@"?_c@@@@YAHXZ"
// X64-DAG:   @@"?_c@@@@YAHXZ"
d30 2
a31 2
// CHECK-DAG: @@"?NeedsReferenceTemporary@@@@3ABHB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3ABHB"
// X64-DAG: @@"?NeedsReferenceTemporary@@@@3AEBHEB" = dso_local constant i32* @@"?$RT1@@NeedsReferenceTemporary@@@@3AEBHEB"
d35 1
a35 1
// CHECK-DAG: @@"?d@@foo@@@@0FB"
d38 1
a38 1
// CHECK-DAG: @@"?e@@foo@@@@1JC"
d41 1
a41 1
// CHECK-DAG: @@"?f@@foo@@@@2DD"
d44 2
a45 2
// CHECK-DAG: @@"??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"??0foo@@@@QEAA@@XZ"
d48 2
a49 2
// CHECK-DAG: @@"??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"??1foo@@@@QEAA@@XZ
d52 2
a53 2
// CHECK-DAG: @@"??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@H@@Z"
d56 2
a57 2
// CHECK-DAG: @@"??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"??0foo@@@@QEAA@@PEAD@@Z"
d82 2
a83 2
// CHECK-DAG: @@"?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"?bar@@@@YA?AVfoo@@@@XZ"
d86 2
a87 2
// CHECK-DAG: @@"??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"??Hfoo@@@@QEAAHH@@Z"
d90 2
a91 2
// CHECK-DAG: @@"?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"?static_method@@foo@@@@SAPEAV1@@XZ"
d101 1
a101 1
// CHECK-DAG: @@"?g@@bar@@@@2HA"
d104 1
a104 1
// CHECK-DAG: @@"?h1@@@@3QAHA"
d106 1
a106 1
// CHECK-DAG: @@"?h2@@@@3QBHB"
d108 2
a109 2
// CHECK-DAG: @@"?h3@@@@3QIAHIA"
// X64-DAG: @@"?h3@@@@3QEIAHEIA"
d112 1
a112 1
// CHECK-DAG: @@"?i@@@@3PAY0BE@@HA"
d116 2
a117 2
// CHECK-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
d120 1
a120 1
// CHECK-DAG: @@"?j@@@@3P6GHCE@@ZA"
d123 2
a124 2
// CHECK-DAG: @@"?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"?k@@@@3PETfoo@@@@DET1@@"
d127 1
a127 1
// CHECK-DAG: @@"?l@@@@3P8foo@@@@AEHH@@ZQ1@@"
d138 3
a140 3
// CHECK-DAG: @@"?g_cInt@@@@3HB"
// CHECK-DAG: @@"?g_vInt@@@@3HC"
// CHECK-DAG: @@"?g_cvInt@@@@3HD"
d146 2
a147 2
// CHECK-DAG: @@"?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"?beta@@@@YA_N_J_W@@Z"
d152 2
a153 2
// CHECK-DAG: @@"?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"?alpha@@@@YAXMN@@Z"
d157 2
a158 2
// CHECK-DAG: @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
d162 2
a163 2
// CHECK-DAG: @@"?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"?delta@@@@YAXQEAHAEBJ@@Z"
d167 2
a168 2
// CHECK-DAG: @@"?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"?epsilon@@@@YAXQEAY19BE@@H@@Z"
d171 2
a172 2
// CHECK-DAG: @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"?zeta@@@@YAXP6AHHH@@Z@@Z"
d177 1
a177 1
// CHECK-DAG: @@"?eta@@@@YAXP_EAHHH@@Z@@Z"
d181 1
a181 1
// CHECK-DAG: @@"?theta@@@@YAXP_EAHHH@@Z@@Z"
d185 1
a185 1
// CHECK-DAG: @@"??2@@YAPAXI@@Z"
d188 1
a188 1
// CHECK-DAG: @@"??3@@YAXPAX@@Z"
d191 1
a191 1
// CHECK-DAG: @@"??_U@@YAPAXI@@Z"
d194 1
a194 1
// CHECK-DAG: @@"??_V@@YAXPAX@@Z"
d200 2
a201 2
// CHECK-DAG: @@"?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"?redundant_parens@@@@YAXXZ"
d206 1
a206 1
// CHECK-DAG: @@"?color1@@@@3PANA"
d208 1
a208 1
// CHECK-DAG: @@"?color2@@@@3QBNB"
d210 1
a210 1
// CHECK-DAG: @@"?color3@@@@3QAY02$$CBNA"
d212 1
a212 1
// CHECK-DAG: @@"?color4@@@@3QAY02$$CBNA"
d216 1
a216 1
// X64-DAG: @@"?memptr1@@@@3RESB@@@@HES1@@"
d218 1
a218 1
// X64-DAG: @@"?memptr2@@@@3PESB@@@@HES1@@"
d220 1
a220 1
// X64-DAG: @@"?memptr3@@@@3REQB@@@@HEQ1@@"
d223 1
a223 1
// X64-DAG: @@"?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
d225 1
a225 1
// X64-DAG: @@"?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
d227 1
a227 1
// X64-DAG: @@"?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
d229 1
a229 1
// X64-DAG: @@"?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
d231 1
a231 1
// X64-DAG: @@"?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
d233 1
a233 1
// X64-DAG: @@"?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
d235 1
a235 1
// X64-DAG: @@"?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
d237 1
a237 1
// X64-DAG: @@"?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
d239 1
a239 1
// X64-DAG: @@"?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
d241 1
a241 1
// X64-DAG: @@"?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
d243 1
a243 1
// X64-DAG: @@"?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
d245 1
a245 1
// X64-DAG: @@"?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"
d249 2
a250 2
// CHECK-DAG: "?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "?fooE@@@@YA?AW4E@@@@XZ"
d254 2
a255 2
// CHECK-DAG: "?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "?fooX@@@@YA?AVX@@@@XZ"
d260 1
a260 1
  // CHECK-DAG: @@"?s0@@PR13182@@@@3PADA"
d262 1
a262 1
  // CHECK-DAG: @@"?s1@@PR13182@@@@3PADA"
d264 1
a264 1
  // CHECK-DAG: @@"?s2@@PR13182@@@@3QBDB"
d266 1
a266 1
  // CHECK-DAG: @@"?s3@@PR13182@@@@3QBDB"
d268 1
a268 1
  // CHECK-DAG: @@"?s4@@PR13182@@@@3RCDC"
d270 1
a270 1
  // CHECK-DAG: @@"?s5@@PR13182@@@@3SDDD"
d272 1
a272 1
  // CHECK-DAG: @@"?s6@@PR13182@@@@3PBQBDB"
d281 2
a282 2
// CHECK-DAG: @@"?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"?local@@?1??extern_c_func@@@@9@@4HA"
d313 1
a313 1
  // CHECK: @@"?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"
d328 1
a328 1
  // CHECK: @@"?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"
d391 1
a391 1
// CHECK-DAG: @@"?vector_func@@@@YQXXZ"
d397 1
a397 1
// CHECK-DAG: @@"??$fn_tmpl@@$1?extern_c_func@@@@YAXXZ@@@@YAXXZ"
d400 1
a400 1
// CHECK-DAG: @@"?overloaded_fn@@@@$$J0YAXXZ"
d423 13
a435 13
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXQAPAU<unnamed-type-T1>@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// CHECK-DAG: @@"?f@@UnnamedType@@@@YAXPAU<unnamed-type-T6>@@S@@1@@@@Z"

// X64-DAG: @@"?f@@UnnamedType@@@@YAXQEAPEAU<unnamed-type-T1>@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT2@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAUT4@@S@@1@@@@Z"(%"struct.UnnamedType::S::T4"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT4@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXUT5@@S@@1@@@@Z"
// X64-DAG: @@"?f@@UnnamedType@@@@YAXPEAU<unnamed-type-T6>@@S@@1@@@@Z"
d451 1
a451 1
// CHECK-DAG: define dso_local i32 @@"?foo@@PassObjectSize@@@@YAHQAHW4__pass_object_size0@@__clang@@@@@@Z"
d453 1
a453 1
// CHECK-DAG: define dso_local i32 @@"?bar@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@@@Z"
d455 1
a455 1
// CHECK-DAG: define dso_local i32 @@"?qux@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@0W4__pass_object_size0@@3@@@@Z"
d457 1
a457 1
// CHECK-DAG: define dso_local i32 @@"?zot@@PassObjectSize@@@@YAHQAHW4__pass_object_size1@@__clang@@@@01@@Z"
d462 1
a462 1
// CHECK-DAG: define dso_local void @@"?f@@Atomic@@@@YAXU?$_Atomic@@H@@__clang@@@@@@Z"(
d466 1
a466 1
// CHECK-DAG: define dso_local void @@"?f@@Complex@@@@YAXU?$_Complex@@H@@__clang@@@@@@Z"(
a468 4
namespace Float16 {
// CHECK-DAG: define dso_local void @@"?f@@Float16@@@@YAXU_Float16@@__clang@@@@@@Z"(
void f(_Float16) {}
}
d492 1
a492 1
// CHECK-DAG: call {{.*}} @@"??0?$L@@V?$H@@PAH@@PR26029@@@@@@PR26029@@@@QAE@@XZ"
@


1.1.1.11
log
@Mark old LLVM instance as dead.
@
text
@@


1.1.1.5.4.1
log
@file mangle-ms.cpp was added on branch tls-maxphys on 2014-08-19 23:47:58 +0000
@
text
@d1 367
@


1.1.1.5.4.2
log
@Rebase to HEAD as of a few days ago.
@
text
@a0 367
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=i386-pc-win32 -std=c++98 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++98| FileCheck -check-prefix X64 %s

int a;
// CHECK-DAG: @@"\01?a@@@@3HA"

namespace N {
  int b;
// CHECK-DAG: @@"\01?b@@N@@@@3HA"

  namespace {
    int anonymous;
// CHECK-DAG: @@"\01?anonymous@@?A@@N@@@@3HA"
  }
}

static int c;
// CHECK-DAG: @@c

int _c(void) {return N::anonymous + c;}
// CHECK-DAG: @@"\01?_c@@@@YAHXZ"
// X64-DAG:   @@"\01?_c@@@@YAHXZ"

class foo {
  static const short d;
// CHECK-DAG: @@"\01?d@@foo@@@@0FB"
protected:
  static volatile long e;
// CHECK-DAG: @@"\01?e@@foo@@@@1JC"
public:
  static const volatile char f;
// CHECK-DAG: @@"\01?f@@foo@@@@2DD"
  int operator+(int a);
  foo(){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@XZ"

  ~foo(){}
// CHECK-DAG: @@"\01??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??1foo@@@@QEAA@@XZ

  foo(int i){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@H@@Z"

  foo(char *q){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@PEAD@@Z"

  static foo* static_method() { return 0; }

}f,s1(1),s2((char*)0);

typedef foo (foo2);

struct bar {
  static int g;
};

union baz {
  int a;
  char b;
  double c;
};

enum quux {
  qone,
  qtwo,
  qthree
};

foo bar() { return foo(); }
// CHECK-DAG: @@"\01?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"\01?bar@@@@YA?AVfoo@@@@XZ"

int foo::operator+(int a) {
// CHECK-DAG: @@"\01??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"\01??Hfoo@@@@QEAAHH@@Z"

  foo::static_method();
// CHECK-DAG: @@"\01?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"\01?static_method@@foo@@@@SAPEAV1@@XZ"
  bar();
  return a;
}

const short foo::d = 0;
volatile long foo::e;
const volatile char foo::f = 'C';

int bar::g;
// CHECK-DAG: @@"\01?g@@bar@@@@2HA"

extern int * const h1 = &a;
// CHECK-DAG: @@"\01?h1@@@@3QAHA"
extern const int * const h2 = &a;
// CHECK-DAG: @@"\01?h2@@@@3QBHB"
extern int * const __restrict h3 = &a;
// CHECK-DAG: @@"\01?h3@@@@3QIAHIA"
// X64-DAG: @@"\01?h3@@@@3QEIAHEIA"

int i[10][20];
// CHECK-DAG: @@"\01?i@@@@3PAY0BE@@HA"

typedef int (*FunT)(int, int);
FunT FunArr[10][20];
// CHECK-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"

int (__stdcall *j)(signed char, unsigned char);
// CHECK-DAG: @@"\01?j@@@@3P6GHCE@@ZA"

const volatile char foo2::*k;
// CHECK-DAG: @@"\01?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"\01?k@@@@3PETfoo@@@@DET1@@"

int (foo2::*l)(int);
// CHECK-DAG: @@"\01?l@@@@3P8foo@@@@AEHH@@ZQ1@@"

// Static functions are mangled, too.
// Also make sure calling conventions, arglists, and throw specs work.
static void __stdcall alpha(float a, double b) throw() {}
bool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) {
// CHECK-DAG: @@"\01?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"\01?beta@@@@YA_N_J_W@@Z"
  alpha(0.f, 0.0);
  return false;
}

// CHECK-DAG: @@"\01?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"\01?alpha@@@@YAXMN@@Z"

// Make sure tag-type mangling works.
void gamma(class foo, struct bar, union baz, enum quux) {}
// CHECK-DAG: @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"

// Make sure pointer/reference-type mangling works.
void delta(int * const a, const long &) {}
// CHECK-DAG: @@"\01?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"\01?delta@@@@YAXQEAHAEBJ@@Z"

// Array mangling.
void epsilon(int a[][10][20]) {}
// CHECK-DAG: @@"\01?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"\01?epsilon@@@@YAXQEAY19BE@@H@@Z"

void zeta(int (*)(int, int)) {}
// CHECK-DAG: @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"

// Blocks mangling (Clang extension). A block should be mangled slightly
// differently from a similar function pointer.
void eta(int (^)(int, int)) {}
// CHECK-DAG: @@"\01?eta@@@@YAXP_EAHHH@@Z@@Z"

typedef int theta_arg(int,int);
void theta(theta_arg^ block) {}
// CHECK-DAG: @@"\01?theta@@@@YAXP_EAHHH@@Z@@Z"

void operator_new_delete() {
  char *ptr = new char;
// CHECK-DAG: @@"\01??2@@YAPAXI@@Z"

  delete ptr;
// CHECK-DAG: @@"\01??3@@YAXPAX@@Z"

  char *array = new char[42];
// CHECK-DAG: @@"\01??_U@@YAPAXI@@Z"

  delete [] array;
// CHECK-DAG: @@"\01??_V@@YAXPAX@@Z"
}

// PR13022
void (redundant_parens)();
void redundant_parens_use() { redundant_parens(); }
// CHECK-DAG: @@"\01?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"\01?redundant_parens@@@@YAXXZ"

// PR13047
typedef double RGB[3];
RGB color1;
// CHECK-DAG: @@"\01?color1@@@@3PANA"
extern const RGB color2 = {};
// CHECK-DAG: @@"\01?color2@@@@3QBNB"
extern RGB const color3[5] = {};
// CHECK-DAG: @@"\01?color3@@@@3QAY02$$CBNA"
extern RGB const ((color4)[5]) = {};
// CHECK-DAG: @@"\01?color4@@@@3QAY02$$CBNA"

struct B;
volatile int B::* volatile memptr1;
// X64-DAG: @@"\01?memptr1@@@@3RESB@@@@HES1@@"
volatile int B::* memptr2;
// X64-DAG: @@"\01?memptr2@@@@3PESB@@@@HES1@@"
int B::* volatile memptr3;
// X64-DAG: @@"\01?memptr3@@@@3REQB@@@@HEQ1@@"
typedef int (*fun)();
volatile fun B::* volatile funmemptr1;
// X64-DAG: @@"\01?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
volatile fun B::* funmemptr2;
// X64-DAG: @@"\01?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
fun B::* volatile funmemptr3;
// X64-DAG: @@"\01?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
void (B::* volatile memptrtofun1)();
// X64-DAG: @@"\01?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
const void (B::* memptrtofun2)();
// X64-DAG: @@"\01?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
volatile void (B::* memptrtofun3)();
// X64-DAG: @@"\01?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
int (B::* volatile memptrtofun4)();
// X64-DAG: @@"\01?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
volatile int (B::* memptrtofun5)();
// X64-DAG: @@"\01?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
const int (B::* memptrtofun6)();
// X64-DAG: @@"\01?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
fun (B::* volatile memptrtofun7)();
// X64-DAG: @@"\01?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
volatile fun (B::* memptrtofun8)();
// X64-DAG: @@"\01?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
const fun (B::* memptrtofun9)();
// X64-DAG: @@"\01?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"

// PR12603
enum E {};
// CHECK-DAG: "\01?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "\01?fooE@@@@YA?AW4E@@@@XZ"
E fooE() { return E(); }

class X {};
// CHECK-DAG: "\01?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "\01?fooX@@@@YA?AVX@@@@XZ"
X fooX() { return X(); }

namespace PR13182 {
  extern char s0[];
  // CHECK-DAG: @@"\01?s0@@PR13182@@@@3PADA"
  extern char s1[42];
  // CHECK-DAG: @@"\01?s1@@PR13182@@@@3PADA"
  extern const char s2[];
  // CHECK-DAG: @@"\01?s2@@PR13182@@@@3QBDB"
  extern const char s3[42];
  // CHECK-DAG: @@"\01?s3@@PR13182@@@@3QBDB"
  extern volatile char s4[];
  // CHECK-DAG: @@"\01?s4@@PR13182@@@@3RCDC"
  extern const volatile char s5[];
  // CHECK-DAG: @@"\01?s5@@PR13182@@@@3SDDD"
  extern const char* const* s6;
  // CHECK-DAG: @@"\01?s6@@PR13182@@@@3PBQBDB"

  char foo() {
    return s0[0] + s1[0] + s2[0] + s3[0] + s4[0] + s5[0] + s6[0][0];
  }
}

extern "C" inline void extern_c_func() {
  static int local;
// CHECK-DAG: @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
}

void call_extern_c_func() {
  extern_c_func();
}

int main() { return 0; }
// CHECK-DAG: @@main
// X64-DAG:   @@main

int wmain() { return 0; }
// CHECK-DAG: @@wmain
// X64-DAG:   @@wmain

int WinMain() { return 0; }
// CHECK-DAG: @@WinMain
// X64-DAG:   @@WinMain

int wWinMain() { return 0; }
// CHECK-DAG: @@wWinMain
// X64-DAG:   @@wWinMain

int DllMain() { return 0; }
// CHECK-DAG: @@DllMain
// X64-DAG:   @@DllMain

inline int inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_inline_function = { 20 }, second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"

  return static_variable_in_inline_function.a_field + second_static.a_field;
}

int call_inline_function_with_local_type() {
  return inline_function_with_local_type();
}

template <typename T>
inline int templated_inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_templated_inline_function = { 20 },
    second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"

  return static_variable_in_templated_inline_function.a_field +
         second_static.a_field;
}

int call_templated_inline_function_with_local_type() {
  return templated_inline_function_with_local_type<int>();
}

// 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; };

// CHECK-DAG: ??2OverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UOverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3OverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VOverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??HOverloadedNewDelete@@@@QAEHH@@Z

// X64-DAG:   ??2OverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??_UOverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??3OverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??_VOverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??HOverloadedNewDelete@@@@QEAAHH@@Z

// Indirecting the function type through a typedef will require a calling
// convention adjustment before building the method decl.

typedef void *__thiscall OperatorNewType(__SIZE_TYPE__);
typedef void __thiscall OperatorDeleteType(void *);

struct TypedefNewDelete {
  OperatorNewType operator new;
  OperatorNewType operator new[];
  OperatorDeleteType operator delete;
  OperatorDeleteType operator delete[];
};

void *TypedefNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
void *TypedefNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
void TypedefNewDelete::operator delete(void *) { }
void TypedefNewDelete::operator delete[](void *) { }

// CHECK-DAG: ??2TypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UTypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3TypedefNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VTypedefNewDelete@@@@SAXPAX@@Z

@


1.1.1.4.4.1
log
@file mangle-ms.cpp was added on branch yamt-pagecache on 2014-05-22 16:18:56 +0000
@
text
@d1 455
@


1.1.1.4.4.2
log
@sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs.  ("Protocol error: too many arguments")
@
text
@a0 455
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=i386-pc-win32 -std=c++11 | FileCheck %s
// RUN: %clang_cc1 -fblocks -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++11| FileCheck -check-prefix X64 %s

int a;
// CHECK-DAG: @@"\01?a@@@@3HA"

namespace N {
  int b;
// CHECK-DAG: @@"\01?b@@N@@@@3HA"

  namespace {
    int anonymous;
// CHECK-DAG: @@"\01?anonymous@@?A@@N@@@@3HA"
  }
}

static int c;
// CHECK-DAG: @@c

int _c(void) {return N::anonymous + c;}
// CHECK-DAG: @@"\01?_c@@@@YAHXZ"
// X64-DAG:   @@"\01?_c@@@@YAHXZ"

class foo {
  static const short d;
// CHECK-DAG: @@"\01?d@@foo@@@@0FB"
protected:
  static volatile long e;
// CHECK-DAG: @@"\01?e@@foo@@@@1JC"
public:
  static const volatile char f;
// CHECK-DAG: @@"\01?f@@foo@@@@2DD"
  int operator+(int a);
  foo(){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@XZ"

  ~foo(){}
// CHECK-DAG: @@"\01??1foo@@@@QAE@@XZ"
// X64-DAG:   @@"\01??1foo@@@@QEAA@@XZ

  foo(int i){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@H@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@H@@Z"

  foo(char *q){}
// CHECK-DAG: @@"\01??0foo@@@@QAE@@PAD@@Z"
// X64-DAG:   @@"\01??0foo@@@@QEAA@@PEAD@@Z"

  static foo* static_method() { return 0; }

}f,s1(1),s2((char*)0);

typedef foo (foo2);

struct bar {
  static int g;
};

union baz {
  int a;
  char b;
  double c;
};

enum quux {
  qone,
  qtwo,
  qthree
};

foo bar() { return foo(); }
// CHECK-DAG: @@"\01?bar@@@@YA?AVfoo@@@@XZ"
// X64-DAG:   @@"\01?bar@@@@YA?AVfoo@@@@XZ"

int foo::operator+(int a) {
// CHECK-DAG: @@"\01??Hfoo@@@@QAEHH@@Z"
// X64-DAG:   @@"\01??Hfoo@@@@QEAAHH@@Z"

  foo::static_method();
// CHECK-DAG: @@"\01?static_method@@foo@@@@SAPAV1@@XZ"
// X64-DAG:   @@"\01?static_method@@foo@@@@SAPEAV1@@XZ"
  bar();
  return a;
}

const short foo::d = 0;
volatile long foo::e;
const volatile char foo::f = 'C';

int bar::g;
// CHECK-DAG: @@"\01?g@@bar@@@@2HA"

extern int * const h1 = &a;
// CHECK-DAG: @@"\01?h1@@@@3QAHA"
extern const int * const h2 = &a;
// CHECK-DAG: @@"\01?h2@@@@3QBHB"
extern int * const __restrict h3 = &a;
// CHECK-DAG: @@"\01?h3@@@@3QIAHIA"
// X64-DAG: @@"\01?h3@@@@3QEIAHEIA"

int i[10][20];
// CHECK-DAG: @@"\01?i@@@@3PAY0BE@@HA"

typedef int (*FunT)(int, int);
FunT FunArr[10][20];
// CHECK-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"
// X64-DAG: @@"\01?FunArr@@@@3PAY0BE@@P6AHHH@@ZA"

int (__stdcall *j)(signed char, unsigned char);
// CHECK-DAG: @@"\01?j@@@@3P6GHCE@@ZA"

const volatile char foo2::*k;
// CHECK-DAG: @@"\01?k@@@@3PTfoo@@@@DT1@@"
// X64-DAG:   @@"\01?k@@@@3PETfoo@@@@DET1@@"

int (foo2::*l)(int);
// CHECK-DAG: @@"\01?l@@@@3P8foo@@@@AEHH@@ZQ1@@"

// Static functions are mangled, too.
// Also make sure calling conventions, arglists, and throw specs work.
static void __stdcall alpha(float a, double b) throw() {}
bool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) {
// CHECK-DAG: @@"\01?beta@@@@YI_N_J_W@@Z"
// X64-DAG:   @@"\01?beta@@@@YA_N_J_W@@Z"
  alpha(0.f, 0.0);
  return false;
}

// CHECK-DAG: @@"\01?alpha@@@@YGXMN@@Z"
// X64-DAG:   @@"\01?alpha@@@@YAXMN@@Z"

// Make sure tag-type mangling works.
void gamma(class foo, struct bar, union baz, enum quux) {}
// CHECK-DAG: @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"
// X64-DAG:   @@"\01?gamma@@@@YAXVfoo@@@@Ubar@@@@Tbaz@@@@W4quux@@@@@@Z"

// Make sure pointer/reference-type mangling works.
void delta(int * const a, const long &) {}
// CHECK-DAG: @@"\01?delta@@@@YAXQAHABJ@@Z"
// X64-DAG:   @@"\01?delta@@@@YAXQEAHAEBJ@@Z"

// Array mangling.
void epsilon(int a[][10][20]) {}
// CHECK-DAG: @@"\01?epsilon@@@@YAXQAY19BE@@H@@Z"
// X64-DAG:   @@"\01?epsilon@@@@YAXQEAY19BE@@H@@Z"

void zeta(int (*)(int, int)) {}
// CHECK-DAG: @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"
// X64-DAG:   @@"\01?zeta@@@@YAXP6AHHH@@Z@@Z"

// Blocks mangling (Clang extension). A block should be mangled slightly
// differently from a similar function pointer.
void eta(int (^)(int, int)) {}
// CHECK-DAG: @@"\01?eta@@@@YAXP_EAHHH@@Z@@Z"

typedef int theta_arg(int,int);
void theta(theta_arg^ block) {}
// CHECK-DAG: @@"\01?theta@@@@YAXP_EAHHH@@Z@@Z"

void operator_new_delete() {
  char *ptr = new char;
// CHECK-DAG: @@"\01??2@@YAPAXI@@Z"

  delete ptr;
// CHECK-DAG: @@"\01??3@@YAXPAX@@Z"

  char *array = new char[42];
// CHECK-DAG: @@"\01??_U@@YAPAXI@@Z"

  delete [] array;
// CHECK-DAG: @@"\01??_V@@YAXPAX@@Z"
}

// PR13022
void (redundant_parens)();
void redundant_parens_use() { redundant_parens(); }
// CHECK-DAG: @@"\01?redundant_parens@@@@YAXXZ"
// X64-DAG:   @@"\01?redundant_parens@@@@YAXXZ"

// PR13047
typedef double RGB[3];
RGB color1;
// CHECK-DAG: @@"\01?color1@@@@3PANA"
extern const RGB color2 = {};
// CHECK-DAG: @@"\01?color2@@@@3QBNB"
extern RGB const color3[5] = {};
// CHECK-DAG: @@"\01?color3@@@@3QAY02$$CBNA"
extern RGB const ((color4)[5]) = {};
// CHECK-DAG: @@"\01?color4@@@@3QAY02$$CBNA"

struct B;
volatile int B::* volatile memptr1;
// X64-DAG: @@"\01?memptr1@@@@3RESB@@@@HES1@@"
volatile int B::* memptr2;
// X64-DAG: @@"\01?memptr2@@@@3PESB@@@@HES1@@"
int B::* volatile memptr3;
// X64-DAG: @@"\01?memptr3@@@@3REQB@@@@HEQ1@@"
typedef int (*fun)();
volatile fun B::* volatile funmemptr1;
// X64-DAG: @@"\01?funmemptr1@@@@3RESB@@@@R6AHXZES1@@"
volatile fun B::* funmemptr2;
// X64-DAG: @@"\01?funmemptr2@@@@3PESB@@@@R6AHXZES1@@"
fun B::* volatile funmemptr3;
// X64-DAG: @@"\01?funmemptr3@@@@3REQB@@@@P6AHXZEQ1@@"
void (B::* volatile memptrtofun1)();
// X64-DAG: @@"\01?memptrtofun1@@@@3R8B@@@@EAAXXZEQ1@@"
const void (B::* memptrtofun2)();
// X64-DAG: @@"\01?memptrtofun2@@@@3P8B@@@@EAAXXZEQ1@@"
volatile void (B::* memptrtofun3)();
// X64-DAG: @@"\01?memptrtofun3@@@@3P8B@@@@EAAXXZEQ1@@"
int (B::* volatile memptrtofun4)();
// X64-DAG: @@"\01?memptrtofun4@@@@3R8B@@@@EAAHXZEQ1@@"
volatile int (B::* memptrtofun5)();
// X64-DAG: @@"\01?memptrtofun5@@@@3P8B@@@@EAA?CHXZEQ1@@"
const int (B::* memptrtofun6)();
// X64-DAG: @@"\01?memptrtofun6@@@@3P8B@@@@EAA?BHXZEQ1@@"
fun (B::* volatile memptrtofun7)();
// X64-DAG: @@"\01?memptrtofun7@@@@3R8B@@@@EAAP6AHXZXZEQ1@@"
volatile fun (B::* memptrtofun8)();
// X64-DAG: @@"\01?memptrtofun8@@@@3P8B@@@@EAAR6AHXZXZEQ1@@"
const fun (B::* memptrtofun9)();
// X64-DAG: @@"\01?memptrtofun9@@@@3P8B@@@@EAAQ6AHXZXZEQ1@@"

// PR12603
enum E {};
// CHECK-DAG: "\01?fooE@@@@YA?AW4E@@@@XZ"
// X64-DAG:   "\01?fooE@@@@YA?AW4E@@@@XZ"
E fooE() { return E(); }

class X {};
// CHECK-DAG: "\01?fooX@@@@YA?AVX@@@@XZ"
// X64-DAG:   "\01?fooX@@@@YA?AVX@@@@XZ"
X fooX() { return X(); }

namespace PR13182 {
  extern char s0[];
  // CHECK-DAG: @@"\01?s0@@PR13182@@@@3PADA"
  extern char s1[42];
  // CHECK-DAG: @@"\01?s1@@PR13182@@@@3PADA"
  extern const char s2[];
  // CHECK-DAG: @@"\01?s2@@PR13182@@@@3QBDB"
  extern const char s3[42];
  // CHECK-DAG: @@"\01?s3@@PR13182@@@@3QBDB"
  extern volatile char s4[];
  // CHECK-DAG: @@"\01?s4@@PR13182@@@@3RCDC"
  extern const volatile char s5[];
  // CHECK-DAG: @@"\01?s5@@PR13182@@@@3SDDD"
  extern const char* const* s6;
  // CHECK-DAG: @@"\01?s6@@PR13182@@@@3PBQBDB"

  char foo() {
    return s0[0] + s1[0] + s2[0] + s3[0] + s4[0] + s5[0] + s6[0][0];
  }
}

namespace EnumMangling {
  extern enum Enum01 { } Enum;
  extern enum Enum02 : bool { } BoolEnum;
  extern enum Enum03 : char { } CharEnum;
  extern enum Enum04 : signed char { } SCharEnum;
  extern enum Enum05 : unsigned char { } UCharEnum;
  extern enum Enum06 : short { } SShortEnum;
  extern enum Enum07 : unsigned short { } UShortEnum;
  extern enum Enum08 : int { } SIntEnum;
  extern enum Enum09 : unsigned int { } UIntEnum;
  extern enum Enum10 : long { } SLongEnum;
  extern enum Enum11 : unsigned long { } ULongEnum;
  extern enum Enum12 : long long { } SLongLongEnum;
  extern enum Enum13 : unsigned long long { } ULongLongEnum;
// CHECK-DAG: @@"\01?Enum@@EnumMangling@@@@3W4Enum01@@1@@A"
// CHECK-DAG: @@"\01?BoolEnum@@EnumMangling@@@@3W4Enum02@@1@@A
// CHECK-DAG: @@"\01?CharEnum@@EnumMangling@@@@3W4Enum03@@1@@A
// CHECK-DAG: @@"\01?SCharEnum@@EnumMangling@@@@3W4Enum04@@1@@A
// CHECK-DAG: @@"\01?UCharEnum@@EnumMangling@@@@3W4Enum05@@1@@A
// CHECK-DAG: @@"\01?SShortEnum@@EnumMangling@@@@3W4Enum06@@1@@A"
// CHECK-DAG: @@"\01?UShortEnum@@EnumMangling@@@@3W4Enum07@@1@@A"
// CHECK-DAG: @@"\01?SIntEnum@@EnumMangling@@@@3W4Enum08@@1@@A"
// CHECK-DAG: @@"\01?UIntEnum@@EnumMangling@@@@3W4Enum09@@1@@A"
// CHECK-DAG: @@"\01?SLongEnum@@EnumMangling@@@@3W4Enum10@@1@@A"
// CHECK-DAG: @@"\01?ULongEnum@@EnumMangling@@@@3W4Enum11@@1@@A"
// CHECK-DAG: @@"\01?SLongLongEnum@@EnumMangling@@@@3W4Enum12@@1@@A"
// CHECK-DAG: @@"\01?ULongLongEnum@@EnumMangling@@@@3W4Enum13@@1@@A"
  decltype(Enum) *UseEnum() { return &Enum; }
  decltype(BoolEnum) *UseBoolEnum() { return &BoolEnum; }
  decltype(CharEnum) *UseCharEnum() { return &CharEnum; }
  decltype(SCharEnum) *UseSCharEnum() { return &SCharEnum; }
  decltype(UCharEnum) *UseUCharEnum() { return &UCharEnum; }
  decltype(SShortEnum) *UseSShortEnum() { return &SShortEnum; }
  decltype(UShortEnum) *UseUShortEnum() { return &UShortEnum; }
  decltype(SIntEnum) *UseSIntEnum() { return &SIntEnum; }
  decltype(UIntEnum) *UseUIntEnum() { return &UIntEnum; }
  decltype(SLongEnum) *UseSLongEnum() { return &SLongEnum; }
  decltype(ULongEnum) *UseULongEnum() { return &ULongEnum; }
  decltype(SLongLongEnum) *UseSLongLongEnum() { return &SLongLongEnum; }
  decltype(ULongLongEnum) *UseULongLongEnum() { return &ULongLongEnum; }
  extern enum class EnumClass01 { } EnumClass;
  extern enum class EnumClass02 : bool { } BoolEnumClass;
  extern enum class EnumClass03 : char { } CharEnumClass;
  extern enum class EnumClass04 : signed char { } SCharEnumClass;
  extern enum class EnumClass05 : unsigned char { } UCharEnumClass;
  extern enum class EnumClass06 : short { } SShortEnumClass;
  extern enum class EnumClass07 : unsigned short { } UShortEnumClass;
  extern enum class EnumClass08 : int { } SIntEnumClass;
  extern enum class EnumClass09 : unsigned int { } UIntEnumClass;
  extern enum class EnumClass10 : long { } SLongEnumClass;
  extern enum class EnumClass11 : unsigned long { } ULongEnumClass;
  extern enum class EnumClass12 : long long { } SLongLongEnumClass;
  extern enum class EnumClass13 : unsigned long long { } ULongLongEnumClass;
// CHECK-DAG: @@"\01?EnumClass@@EnumMangling@@@@3W4EnumClass01@@1@@A"
// CHECK-DAG: @@"\01?BoolEnumClass@@EnumMangling@@@@3W4EnumClass02@@1@@A
// CHECK-DAG: @@"\01?CharEnumClass@@EnumMangling@@@@3W4EnumClass03@@1@@A
// CHECK-DAG: @@"\01?SCharEnumClass@@EnumMangling@@@@3W4EnumClass04@@1@@A
// CHECK-DAG: @@"\01?UCharEnumClass@@EnumMangling@@@@3W4EnumClass05@@1@@A
// CHECK-DAG: @@"\01?SShortEnumClass@@EnumMangling@@@@3W4EnumClass06@@1@@A"
// CHECK-DAG: @@"\01?UShortEnumClass@@EnumMangling@@@@3W4EnumClass07@@1@@A"
// CHECK-DAG: @@"\01?SIntEnumClass@@EnumMangling@@@@3W4EnumClass08@@1@@A"
// CHECK-DAG: @@"\01?UIntEnumClass@@EnumMangling@@@@3W4EnumClass09@@1@@A"
// CHECK-DAG: @@"\01?SLongEnumClass@@EnumMangling@@@@3W4EnumClass10@@1@@A"
// CHECK-DAG: @@"\01?ULongEnumClass@@EnumMangling@@@@3W4EnumClass11@@1@@A"
// CHECK-DAG: @@"\01?SLongLongEnumClass@@EnumMangling@@@@3W4EnumClass12@@1@@A"
// CHECK-DAG: @@"\01?ULongLongEnumClass@@EnumMangling@@@@3W4EnumClass13@@1@@A"
  decltype(EnumClass) *UseEnumClass() { return &EnumClass; }
  decltype(BoolEnumClass) *UseBoolEnumClass() { return &BoolEnumClass; }
  decltype(CharEnumClass) *UseCharEnumClass() { return &CharEnumClass; }
  decltype(SCharEnumClass) *UseSCharEnumClass() { return &SCharEnumClass; }
  decltype(UCharEnumClass) *UseUCharEnumClass() { return &UCharEnumClass; }
  decltype(SShortEnumClass) *UseSShortEnumClass() { return &SShortEnumClass; }
  decltype(UShortEnumClass) *UseUShortEnumClass() { return &UShortEnumClass; }
  decltype(SIntEnumClass) *UseSIntEnumClass() { return &SIntEnumClass; }
  decltype(UIntEnumClass) *UseUIntEnumClass() { return &UIntEnumClass; }
  decltype(SLongEnumClass) *UseSLongEnumClass() { return &SLongEnumClass; }
  decltype(ULongEnumClass) *UseULongEnumClass() { return &ULongEnumClass; }
  decltype(SLongLongEnumClass) *UseSLongLongEnumClass() { return &SLongLongEnumClass; }
  decltype(ULongLongEnumClass) *UseULongLongEnumClass() { return &ULongLongEnumClass; }
}

extern "C" inline void extern_c_func() {
  static int local;
// CHECK-DAG: @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
// X64-DAG:   @@"\01?local@@?1??extern_c_func@@@@9@@4HA"
}

void call_extern_c_func() {
  extern_c_func();
}

int main() { return 0; }
// CHECK-DAG: @@main
// X64-DAG:   @@main

int wmain() { return 0; }
// CHECK-DAG: @@wmain
// X64-DAG:   @@wmain

int WinMain() { return 0; }
// CHECK-DAG: @@WinMain
// X64-DAG:   @@WinMain

int wWinMain() { return 0; }
// CHECK-DAG: @@wWinMain
// X64-DAG:   @@wWinMain

int DllMain() { return 0; }
// CHECK-DAG: @@DllMain
// X64-DAG:   @@DllMain

inline int inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_inline_function = { 20 }, second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_inline_function@@?1??inline_function_with_local_type@@@@YAHXZ@@4U<unnamed-type-static_variable_in_inline_function>@@?1??1@@YAHXZ@@A"

  return static_variable_in_inline_function.a_field + second_static.a_field;
}

int call_inline_function_with_local_type() {
  return inline_function_with_local_type();
}

template <typename T>
inline int templated_inline_function_with_local_type() {
  static struct {
    int a_field;
  } static_variable_in_templated_inline_function = { 20 },
    second_static = { 40 };
  // CHECK: @@"\01?static_variable_in_templated_inline_function@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@4U<unnamed-type-static_variable_in_templated_inline_function>@@?1???$templated_inline_function_with_local_type@@H@@@@YAHXZ@@A"

  return static_variable_in_templated_inline_function.a_field +
         second_static.a_field;
}

int call_templated_inline_function_with_local_type() {
  return templated_inline_function_with_local_type<int>();
}

// 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; };

// CHECK-DAG: ??2OverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UOverloadedNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3OverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VOverloadedNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??HOverloadedNewDelete@@@@QAEHH@@Z

// X64-DAG:   ??2OverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??_UOverloadedNewDelete@@@@SAPEAX_K@@Z
// X64-DAG:   ??3OverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??_VOverloadedNewDelete@@@@SAXPEAX@@Z
// X64-DAG:   ??HOverloadedNewDelete@@@@QEAAHH@@Z

// Indirecting the function type through a typedef will require a calling
// convention adjustment before building the method decl.

typedef void *__thiscall OperatorNewType(__SIZE_TYPE__);
typedef void __thiscall OperatorDeleteType(void *);

struct TypedefNewDelete {
  OperatorNewType operator new;
  OperatorNewType operator new[];
  OperatorDeleteType operator delete;
  OperatorDeleteType operator delete[];
};

void *TypedefNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
void *TypedefNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
void TypedefNewDelete::operator delete(void *) { }
void TypedefNewDelete::operator delete[](void *) { }

// CHECK-DAG: ??2TypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??_UTypedefNewDelete@@@@SAPAXI@@Z
// CHECK-DAG: ??3TypedefNewDelete@@@@SAXPAX@@Z
// CHECK-DAG: ??_VTypedefNewDelete@@@@SAXPAX@@Z

namespace PR18022 {

struct { } a;
decltype(a) fun(decltype(a) x, decltype(a)) { return x; }
// CHECK-DAG: ?fun@@PR18022@@@@YA?AU<unnamed-type-a>@@1@@U21@@0@@Z

}
@


