1*67e74705SXin Li // RUN: %clang_cc1 -std=c++1y -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=19.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2015 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++1y -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=18.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2013 3*67e74705SXin Li 4*67e74705SXin Li template <typename> int x = 0; 5*67e74705SXin Li 6*67e74705SXin Li // CHECK-DAG: "\01??$x@X@@3HA" 7*67e74705SXin Li template <> int x<void>; 8*67e74705SXin Li // CHECK-DAG: "\01??$x@H@@3HA" 9*67e74705SXin Li template <> int x<int>; 10*67e74705SXin Li 11*67e74705SXin Li // CHECK-DAG: "\01?FunctionWithLocalType@@YA?A?<auto>@@XZ" FunctionWithLocalType()12*67e74705SXin Liauto FunctionWithLocalType() { 13*67e74705SXin Li struct LocalType {}; 14*67e74705SXin Li return LocalType{}; 15*67e74705SXin Li } 16*67e74705SXin Li 17*67e74705SXin Li // CHECK-DAG: "\01?ValueFromFunctionWithLocalType@@3ULocalType@?1??FunctionWithLocalType@@YA?A?<auto>@@XZ@A" 18*67e74705SXin Li auto ValueFromFunctionWithLocalType = FunctionWithLocalType(); 19*67e74705SXin Li 20*67e74705SXin Li // CHECK-DAG: "\01??R<lambda_0>@@QBE?A?<auto>@@XZ" __anond97fd7f80102null21*67e74705SXin Liauto LambdaWithLocalType = [] { 22*67e74705SXin Li struct LocalType {}; 23*67e74705SXin Li return LocalType{}; 24*67e74705SXin Li }; 25*67e74705SXin Li 26*67e74705SXin Li // CHECK-DAG: "\01?ValueFromLambdaWithLocalType@@3ULocalType@?1???R<lambda_0>@@QBE?A?<auto>@@XZ@A" 27*67e74705SXin Li auto ValueFromLambdaWithLocalType = LambdaWithLocalType(); 28*67e74705SXin Li 29*67e74705SXin Li template <typename T> TemplateFuncionWithLocalLambda(T)30*67e74705SXin Liauto TemplateFuncionWithLocalLambda(T) { 31*67e74705SXin Li auto LocalLambdaWithLocalType = []() { 32*67e74705SXin Li struct LocalType {}; 33*67e74705SXin Li return LocalType{}; 34*67e74705SXin Li }; 35*67e74705SXin Li return LocalLambdaWithLocalType(); 36*67e74705SXin Li } 37*67e74705SXin Li 38*67e74705SXin Li // MSVC2013-DAG: "\01?ValueFromTemplateFuncionWithLocalLambda@@3ULocalType@?2???R<lambda_1>@?0???$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z@QBE?A?3@XZ@A" 39*67e74705SXin Li // MSVC2013-DAG: "\01?ValueFromTemplateFuncionWithLocalLambda@@3ULocalType@?2???R<lambda_1>@?0???$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z@QBE?A?3@XZ@A" 40*67e74705SXin Li // MSVC2015-DAG: "\01?ValueFromTemplateFuncionWithLocalLambda@@3ULocalType@?1???R<lambda_1>@?0???$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z@QBE?A?3@XZ@A" 41*67e74705SXin Li // MSVC2015-DAG: "\01?ValueFromTemplateFuncionWithLocalLambda@@3ULocalType@?1???R<lambda_1>@?0???$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z@QBE?A?3@XZ@A" 42*67e74705SXin Li // CHECK-DAG: "\01??$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z" 43*67e74705SXin Li // CHECK-DAG: "\01??R<lambda_1>@?0???$TemplateFuncionWithLocalLambda@H@@YA?A?<auto>@@H@Z@QBE?A?1@XZ" 44*67e74705SXin Li auto ValueFromTemplateFuncionWithLocalLambda = TemplateFuncionWithLocalLambda(0); 45*67e74705SXin Li 46*67e74705SXin Li struct S; 47*67e74705SXin Li template <int S::*> 48*67e74705SXin Li int WithPMD = 0; 49*67e74705SXin Li 50*67e74705SXin Li template <> int WithPMD<nullptr>; 51*67e74705SXin Li // CHECK-DAG: "\01??$WithPMD@$GA@A@?0@@3HA" 52*67e74705SXin Li 53*67e74705SXin Li template <const int *, const int *> 54*67e74705SXin Li struct Foo {}; 55*67e74705SXin Li 56*67e74705SXin Li Foo<&x<int>, &x<int>> Zoo; 57*67e74705SXin Li // CHECK-DAG: "\01?Zoo@@3U?$Foo@$1??$x@H@@3HA$1?1@3HA@@A" 58*67e74705SXin Li 59*67e74705SXin Li template <typename T> T unaligned_x; test_unaligned()60*67e74705SXin Liextern auto test_unaligned() { return unaligned_x<int __unaligned *>; } 61*67e74705SXin Li // CHECK-DAG: "\01??$unaligned_x@PFAH@@3PFAHA" 62*67e74705SXin Li 63