1f978886eSReid Kleckner // RUN: %clang_cc1 -fsyntax-only -verify %s 2f978886eSReid Kleckner 3f978886eSReid Kleckner // Split from function-template-specialization.cpp because the noreturn warning 4f978886eSReid Kleckner // requires analysis-based warnings, which the other errors in that test case 5f978886eSReid Kleckner // disable. 6f978886eSReid Kleckner f3()7f978886eSReid Klecknertemplate <int N> void __attribute__((noreturn)) f3() { __builtin_unreachable(); } f3()8f978886eSReid Klecknertemplate <> void f3<1>() { } // expected-warning {{function declared 'noreturn' should not return}} 9*e497438cSNico Weber 10*e497438cSNico Weber #if __cplusplus >= 201103L 11*e497438cSNico Weber namespace PR21942 { 12*e497438cSNico Weber template <int> 13*e497438cSNico Weber struct A { 14*e497438cSNico Weber void foo[[noreturn]](); 15*e497438cSNico Weber }; 16*e497438cSNico Weber 17*e497438cSNico Weber template <> foo()18*e497438cSNico Webervoid A<0>::foo() {} // expected-warning{{function declared 'noreturn' should not return}} 19*e497438cSNico Weber } 20*e497438cSNico Weber #endif 21