1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: "\01?DeducedType@@3HA" 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesauto DeducedType = 30; 506e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith 606e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith// CHECK: "\01?LRef@@YAXAAH@Z" 706e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smithvoid LRef(int& a) { } 806e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith 906e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith// CHECK: "\01?RRef@@YAH$$QAH@Z" 1006e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smithint RRef(int&& a) { return a; } 1106e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith 1206e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smith// CHECK: "\01?Null@@YAX$$T@Z" 1306e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smithnamespace std { typedef decltype(__nullptr) nullptr_t; } 1406e767d6703fdae9cda21c6c96c79a0135e2567aRichard Smithvoid Null(std::nullptr_t) {} 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace EnumMangling { 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum01 { } Enum; 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum02 : bool { } BoolEnum; 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum03 : char { } CharEnum; 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum04 : signed char { } SCharEnum; 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum05 : unsigned char { } UCharEnum; 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum06 : short { } SShortEnum; 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum07 : unsigned short { } UShortEnum; 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum08 : int { } SIntEnum; 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum09 : unsigned int { } UIntEnum; 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum10 : long { } SLongEnum; 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum11 : unsigned long { } ULongEnum; 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum12 : long long { } SLongLongEnum; 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum Enum13 : unsigned long long { } ULongLongEnum; 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?Enum@EnumMangling@@3W4Enum01@1@A" 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?BoolEnum@EnumMangling@@3W4Enum02@1@A 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?CharEnum@EnumMangling@@3W4Enum03@1@A 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SCharEnum@EnumMangling@@3W4Enum04@1@A 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UCharEnum@EnumMangling@@3W4Enum05@1@A 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SShortEnum@EnumMangling@@3W4Enum06@1@A" 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UShortEnum@EnumMangling@@3W4Enum07@1@A" 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SIntEnum@EnumMangling@@3W4Enum08@1@A" 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UIntEnum@EnumMangling@@3W4Enum09@1@A" 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SLongEnum@EnumMangling@@3W4Enum10@1@A" 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?ULongEnum@EnumMangling@@3W4Enum11@1@A" 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SLongLongEnum@EnumMangling@@3W4Enum12@1@A" 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?ULongLongEnum@EnumMangling@@3W4Enum13@1@A" 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(Enum) *UseEnum() { return &Enum; } 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(BoolEnum) *UseBoolEnum() { return &BoolEnum; } 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(CharEnum) *UseCharEnum() { return &CharEnum; } 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SCharEnum) *UseSCharEnum() { return &SCharEnum; } 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UCharEnum) *UseUCharEnum() { return &UCharEnum; } 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SShortEnum) *UseSShortEnum() { return &SShortEnum; } 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UShortEnum) *UseUShortEnum() { return &UShortEnum; } 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SIntEnum) *UseSIntEnum() { return &SIntEnum; } 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UIntEnum) *UseUIntEnum() { return &UIntEnum; } 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SLongEnum) *UseSLongEnum() { return &SLongEnum; } 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(ULongEnum) *UseULongEnum() { return &ULongEnum; } 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SLongLongEnum) *UseSLongLongEnum() { return &SLongLongEnum; } 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(ULongLongEnum) *UseULongLongEnum() { return &ULongLongEnum; } 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass01 { } EnumClass; 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass02 : bool { } BoolEnumClass; 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass03 : char { } CharEnumClass; 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass04 : signed char { } SCharEnumClass; 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass05 : unsigned char { } UCharEnumClass; 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass06 : short { } SShortEnumClass; 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass07 : unsigned short { } UShortEnumClass; 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass08 : int { } SIntEnumClass; 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass09 : unsigned int { } UIntEnumClass; 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass10 : long { } SLongEnumClass; 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass11 : unsigned long { } ULongEnumClass; 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass12 : long long { } SLongLongEnumClass; 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines extern enum class EnumClass13 : unsigned long long { } ULongLongEnumClass; 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?EnumClass@EnumMangling@@3W4EnumClass01@1@A" 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?BoolEnumClass@EnumMangling@@3W4EnumClass02@1@A 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?CharEnumClass@EnumMangling@@3W4EnumClass03@1@A 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SCharEnumClass@EnumMangling@@3W4EnumClass04@1@A 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UCharEnumClass@EnumMangling@@3W4EnumClass05@1@A 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SShortEnumClass@EnumMangling@@3W4EnumClass06@1@A" 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UShortEnumClass@EnumMangling@@3W4EnumClass07@1@A" 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SIntEnumClass@EnumMangling@@3W4EnumClass08@1@A" 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?UIntEnumClass@EnumMangling@@3W4EnumClass09@1@A" 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SLongEnumClass@EnumMangling@@3W4EnumClass10@1@A" 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?ULongEnumClass@EnumMangling@@3W4EnumClass11@1@A" 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?SLongLongEnumClass@EnumMangling@@3W4EnumClass12@1@A" 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: @"\01?ULongLongEnumClass@EnumMangling@@3W4EnumClass13@1@A" 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(EnumClass) *UseEnumClass() { return &EnumClass; } 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(BoolEnumClass) *UseBoolEnumClass() { return &BoolEnumClass; } 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(CharEnumClass) *UseCharEnumClass() { return &CharEnumClass; } 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SCharEnumClass) *UseSCharEnumClass() { return &SCharEnumClass; } 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UCharEnumClass) *UseUCharEnumClass() { return &UCharEnumClass; } 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SShortEnumClass) *UseSShortEnumClass() { return &SShortEnumClass; } 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UShortEnumClass) *UseUShortEnumClass() { return &UShortEnumClass; } 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SIntEnumClass) *UseSIntEnumClass() { return &SIntEnumClass; } 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(UIntEnumClass) *UseUIntEnumClass() { return &UIntEnumClass; } 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SLongEnumClass) *UseSLongEnumClass() { return &SLongEnumClass; } 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(ULongEnumClass) *UseULongEnumClass() { return &ULongEnumClass; } 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(SLongLongEnumClass) *UseSLongLongEnumClass() { return &SLongLongEnumClass; } 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines decltype(ULongLongEnumClass) *UseULongLongEnumClass() { return &ULongLongEnumClass; } 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace PR18022 { 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct { } a; 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesdecltype(a) fun(decltype(a) x, decltype(a)) { return x; } 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ?fun@PR18022@@YA?AU<unnamed-type-a>@1@U21@0@Z 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesinline int define_lambda() { 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static auto lambda = [] { static int local; ++local; return local; }; 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// First, we have the static local variable of type "<lambda_1>" inside of 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// "define_lambda". 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ?lambda@?1??define_lambda@@YAHXZ@4V<lambda_1>@@A 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Next, we have the "operator()" for "<lambda_1>" which is inside of 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// "define_lambda". 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ??R<lambda_1>@?define_lambda@@YAHXZ@QBEHXZ 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Finally, we have the local which is inside of "<lambda_1>" which is inside of 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// "define_lambda". Hooray. 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ?local@?2???R<lambda_1>@?define_lambda@@YAHXZ@QBEHXZ@4HA 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return lambda(); 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint call_lambda() { 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return define_lambda(); 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 1226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace PR19361 { 1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct A { 1256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void foo() __restrict &; 1266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void foo() __restrict &&; 1276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}; 1286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid A::foo() __restrict & {} 1296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-DAG: @"\01?foo@A@PR19361@@QIGAEXXZ" 1306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid A::foo() __restrict && {} 1316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-DAG: @"\01?foo@A@PR19361@@QIHAEXXZ" 1326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 134ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint operator"" _deg(long double) { return 0; } 135ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK-DAG: @"\01??__K_deg@@YAHO@Z" 136ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 137ef8225444452a1486bd721f3285301fe84643b00Stephen Hinestemplate <char...> 138ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesvoid templ_fun_with_pack() {} 139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 140ef8225444452a1486bd721f3285301fe84643b00Stephen Hinestemplate void templ_fun_with_pack<>(); 141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK-DAG: @"\01??$templ_fun_with_pack@$S@@YAXXZ" 142