158340526SSaleem Abdulrasool // RUN: %clang_cc1 -triple i686-unknown-windows-msvc -fdeclspec -emit-llvm %s -o - | FileCheck %s 213aeee0dSSaleem Abdulrasool // RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-64 358340526SSaleem Abdulrasool f()458340526SSaleem Abdulrasoolvoid __attribute__((__swiftcall__)) f() {} 5fb93154bSReid Kleckner // CHECK-DAG: @"?f@@YSXXZ" 613aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@@YSXXZ" 758340526SSaleem Abdulrasool 858340526SSaleem Abdulrasool void (__attribute__((__swiftcall__)) *p)(); 9fb93154bSReid Kleckner // CHECK-DAG: @"?p@@3P6SXXZA" 1013aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?p@@3P6SXXZEA 1158340526SSaleem Abdulrasool 1258340526SSaleem Abdulrasool namespace { f()1358340526SSaleem Abdulrasoolvoid __attribute__((__swiftcall__)) __attribute__((__used__)) f() { } 1458340526SSaleem Abdulrasool } 15*df8dd61fSReid Kleckner // CHECK-DAG: @"?f@?A0x{{[^@]*}}@@YSXXZ" 16*df8dd61fSReid Kleckner // CHECK-64-DAG: @"?f@?A0x{{[^@]*}}@@YSXXZ" 1758340526SSaleem Abdulrasool 1858340526SSaleem Abdulrasool namespace n { f()1958340526SSaleem Abdulrasoolvoid __attribute__((__swiftcall__)) f() {} 2058340526SSaleem Abdulrasool } 2113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?f@n@@YSXXZ" 2213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@n@@YSXXZ" 2358340526SSaleem Abdulrasool 2458340526SSaleem Abdulrasool struct __declspec(dllexport) S { 2558340526SSaleem Abdulrasool S(const S &) = delete; 2658340526SSaleem Abdulrasool S & operator=(const S &) = delete; mS2758340526SSaleem Abdulrasool void __attribute__((__swiftcall__)) m() { } 2858340526SSaleem Abdulrasool }; 2913aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?m@S@@QASXXZ" 3013aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?m@S@@QEASXXZ" 3158340526SSaleem Abdulrasool f(void (()))3258340526SSaleem Abdulrasoolvoid f(void (__attribute__((__swiftcall__))())) {} 3313aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?f@@YAXP6SXXZ@Z" 3413aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@@YAXP6SXXZ@Z" 3513aeee0dSSaleem Abdulrasool g()3613aeee0dSSaleem Abdulrasoolvoid __attribute__((__preserve_most__)) g() {} 3713aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@@YUXXZ" 3813aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@@YUXXZ" 3913aeee0dSSaleem Abdulrasool 4013aeee0dSSaleem Abdulrasool void (__attribute__((__preserve_most__)) *q)(); 4113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?q@@3P6UXXZA" 4213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?q@@3P6UXXZEA" 4313aeee0dSSaleem Abdulrasool 4413aeee0dSSaleem Abdulrasool namespace { g()4513aeee0dSSaleem Abdulrasoolvoid __attribute__((__preserve_most__)) __attribute__((__used__)) g() {} 4613aeee0dSSaleem Abdulrasool } 47*df8dd61fSReid Kleckner // CHECK-DAG: @"?g@?A0x{{[^@]*}}@@YUXXZ" 48*df8dd61fSReid Kleckner // CHECK-64-DAG: @"?g@?A0x{{[^@]*}}@@YUXXZ" 4913aeee0dSSaleem Abdulrasool 5013aeee0dSSaleem Abdulrasool namespace n { g()5113aeee0dSSaleem Abdulrasoolvoid __attribute__((__preserve_most__)) g() {} 5213aeee0dSSaleem Abdulrasool } 5313aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@n@@YUXXZ" 5413aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@n@@YUXXZ" 5513aeee0dSSaleem Abdulrasool 5613aeee0dSSaleem Abdulrasool struct __declspec(dllexport) T { 5713aeee0dSSaleem Abdulrasool T(const T &) = delete; 5813aeee0dSSaleem Abdulrasool T & operator=(const T &) = delete; mT5913aeee0dSSaleem Abdulrasool void __attribute__((__preserve_most__)) m() {} 6013aeee0dSSaleem Abdulrasool }; 6113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?m@T@@QAUXXZ" 6213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?m@T@@QEAUXXZ" 6313aeee0dSSaleem Abdulrasool g(void (()))6413aeee0dSSaleem Abdulrasoolvoid g(void (__attribute__((__preserve_most__))())) {} 6513aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@@YAXP6UXXZ@Z" 6613aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@@YAXP6UXXZ@Z" 6758340526SSaleem Abdulrasool 68