]> git.proxmox.com Git - rustc.git/blame - src/llvm/tools/clang/test/SemaCXX/attr-noreturn.cpp
Imported Upstream version 0.6
[rustc.git] / src / llvm / tools / clang / test / SemaCXX / attr-noreturn.cpp
CommitLineData
223e47cc
LB
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.
5namespace test5 {
6 struct A {
7 __attribute__((noreturn)) void fail();
8 void nofail();
9 } a;
10
11 int &test1() {
12 a.nofail();
13 } // expected-warning {{control reaches end of non-void function}}
14
15 int &test2() {
16 a.fail();
17 }
18}
19
20// PR5620
21void f0() __attribute__((__noreturn__));
22void f1(void (*)());
23void f2() { f1(f0); }
24
25// Taking the address of a noreturn function
26void test_f0a() {
27 void (*fp)() = f0;
28 void (*fp1)() __attribute__((noreturn)) = f0;
29}
30
31// Taking the address of an overloaded noreturn function
32void f0(int) __attribute__((__noreturn__));
33
34void test_f0b() {
35 void (*fp)() = f0;
36 void (*fp1)() __attribute__((noreturn)) = f0;
37}
38
39// No-returned function pointers
40typedef void (* noreturn_fp)() __attribute__((noreturn));
41
42void f3(noreturn_fp); // expected-note{{candidate function}}
43
44void test_f3() {
45 f3(f0); // okay
46 f3(f2); // expected-error{{no matching function for call}}
47}
48
49
50class xpto {
51 int blah() __attribute__((noreturn));
52};
53
54int xpto::blah() {
55 return 3; // expected-warning {{function 'blah' declared 'noreturn' should not return}}
56}
57
58// PR12948
59
60namespace PR12948 {
61 template<int>
62 void foo() __attribute__((__noreturn__));
63
64 template<int>
65 void foo() {
66 while (1) continue;
67 }
68
69 void bar() __attribute__((__noreturn__));
70
71 void bar() {
72 foo<0>();
73 }
74
75
76 void baz() __attribute__((__noreturn__));
77 typedef void voidfn();
78 voidfn baz;
79
80 template<typename> void wibble() __attribute__((__noreturn__));
81 template<typename> voidfn wibble;
82}