• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 // Reachability tests have to come first because they get suppressed
4 // if any errors have occurred.
5 namespace test5 {
6   struct A {
7     __attribute__((noreturn)) void fail();
8     void nofail();
9   } a;
10 
test1()11   int &test1() {
12     a.nofail();
13   } // expected-warning {{control reaches end of non-void function}}
14 
test2()15   int &test2() {
16     a.fail();
17   }
18 }
19 
20 // PR5620
21 void f0() __attribute__((__noreturn__));
22 void f1(void (*)());
f2()23 void f2() { f1(f0); }
24 
25 // Taking the address of a noreturn function
test_f0a()26 void test_f0a() {
27   void (*fp)() = f0;
28   void (*fp1)() __attribute__((noreturn)) = f0;
29 }
30 
31 // Taking the address of an overloaded noreturn function
32 void f0(int) __attribute__((__noreturn__));
33 
test_f0b()34 void test_f0b() {
35   void (*fp)() = f0;
36   void (*fp1)() __attribute__((noreturn)) = f0;
37 }
38 
39 // No-returned function pointers
40 typedef void (* noreturn_fp)() __attribute__((noreturn));
41 
42 void f3(noreturn_fp); // expected-note{{candidate function}}
43 
test_f3()44 void test_f3() {
45   f3(f0); // okay
46   f3(f2); // expected-error{{no matching function for call}}
47 }
48 
49 
50 class xpto {
51   int blah() __attribute__((noreturn));
52 };
53 
blah()54 int xpto::blah() {
55   return 3; // expected-warning {{function 'blah' declared 'noreturn' should not return}}
56 }
57