attr-noreturn.cpp revision 5d1d7ae120c2c8e6cba5d2a712b33500a5aecc10
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3// PR5620 4void f0() __attribute__((__noreturn__)); 5void f1(void (*)()); 6void f2() { f1(f0); } 7 8// Taking the address of a noreturn function 9void test_f0a() { 10 void (*fp)() = f0; 11 void (*fp1)() __attribute__((noreturn)) = f0; 12} 13 14// Taking the address of an overloaded noreturn function 15void f0(int) __attribute__((__noreturn__)); 16 17void test_f0b() { 18 void (*fp)() = f0; 19 void (*fp1)() __attribute__((noreturn)) = f0; 20} 21 22// No-returned function pointers 23typedef void (* noreturn_fp)() __attribute__((noreturn)); 24 25void f3(noreturn_fp); // expected-note{{candidate function}} 26 27void test_f3() { 28 f3(f0); // okay 29 f3(f2); // expected-error{{no matching function for call}} 30} 31 32 33class xpto { 34 int blah() __attribute__((noreturn)); 35}; 36 37int xpto::blah() { 38 return 3; // expected-warning {{function 'blah' declared 'noreturn' should not return}} 39} 40