1*1a94d877SReid Kleckner // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=x86_64-pc-win32 -Wno-noexcept-type -fms-compatibility-version=19.12 | FileCheck %s --check-prefix=CHECK --check-prefix=CXX11 2*1a94d877SReid Kleckner // RUN: %clang_cc1 -std=c++17 -fms-extensions -emit-llvm %s -o - -triple=x86_64-pc-win32 | FileCheck %s --check-prefix=CHECK --check-prefix=NOCOMPAT 3*1a94d877SReid Kleckner // RUN: %clang_cc1 -std=c++17 -fms-extensions -emit-llvm %s -o - -triple=x86_64-pc-win32 -fms-compatibility-version=19.12 | FileCheck %s --check-prefix=CHECK --check-prefix=CXX17 4*1a94d877SReid Kleckner 5*1a94d877SReid Kleckner // Prove that mangling only changed for noexcept types under /std:C++17, not all noexcept functions 6*1a94d877SReid Kleckner // CHECK-DAG: @"?nochange@@YAXXZ" nochange()7*1a94d877SReid Klecknervoid nochange() noexcept {} 8*1a94d877SReid Kleckner 9*1a94d877SReid Kleckner // CXX11-DAG: @"?a@@YAXP6AHXZ@Z" 10*1a94d877SReid Kleckner // NOCOMPAT-DAG: @"?a@@YAXP6AHXZ@Z" 11*1a94d877SReid Kleckner // CXX17-DAG: @"?a@@YAXP6AHX_E@Z" a(int ()noexcept)12*1a94d877SReid Klecknervoid a(int() noexcept) {} 13*1a94d877SReid Kleckner // CHECK-DAG: @"?b@@YAXP6AHXZ@Z" b(int ()noexcept (false))14*1a94d877SReid Klecknervoid b(int() noexcept(false)) {} 15*1a94d877SReid Kleckner // CXX11-DAG: @"?c@@YAXP6AHXZ@Z" 16*1a94d877SReid Kleckner // NOCOMPAT-DAG: @"?c@@YAXP6AHXZ@Z" 17*1a94d877SReid Kleckner // CXX17-DAG: @"?c@@YAXP6AHX_E@Z" c(int ()noexcept (true))18*1a94d877SReid Klecknervoid c(int() noexcept(true)) {} 19*1a94d877SReid Kleckner // CHECK-DAG: @"?d@@YAXP6AHXZ@Z" d(int ())20*1a94d877SReid Klecknervoid d(int()) {} 21*1a94d877SReid Kleckner 22*1a94d877SReid Kleckner template <typename T> 23*1a94d877SReid Kleckner class e; 24*1a94d877SReid Kleckner template <typename T, typename... U> 25*1a94d877SReid Kleckner class e<T(U...) noexcept> { 26*1a94d877SReid Kleckner // CXX11-DAG: @"?ee@?$e@$$A6AXXZ@@EEAAXXZ" 27*1a94d877SReid Kleckner // NOCOMPAT-DAG: @"?ee@?$e@$$A6AXXZ@@EEAAXXZ" 28*1a94d877SReid Kleckner // CXX17-DAG: @"?ee@?$e@$$A6AXX_E@@EEAAXXZ" ee(U &&...)29*1a94d877SReid Kleckner virtual T ee(U &&...) noexcept {}; 30*1a94d877SReid Kleckner }; 31*1a94d877SReid Kleckner 32*1a94d877SReid Kleckner e<void() noexcept> e1; 33*1a94d877SReid Kleckner 34*1a94d877SReid Kleckner template <typename T> 35*1a94d877SReid Kleckner class f; 36*1a94d877SReid Kleckner template <typename T, typename... U> 37*1a94d877SReid Kleckner class f<T(U...)> { 38*1a94d877SReid Kleckner // CHECK-DAG: @"?ff@?$f@$$A6AXXZ@@EEAAXXZ" ff(U &&...)39*1a94d877SReid Kleckner virtual T ff(U &&...) noexcept {}; 40*1a94d877SReid Kleckner }; 41*1a94d877SReid Kleckner 42*1a94d877SReid Kleckner f<void()> f1; 43