attr-noreturn.c revision 9dc9c376a9f3e0c72f33e27075caa0647dadb350
1d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc -verify -fsyntax-only %s
2d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
3d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarstatic void (*fp0)(void) __attribute__((noreturn));
4d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
5d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarstatic void __attribute__((noreturn)) f0(void) {
6d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar  fatal();
729813c3509a0229947e35897a9a145c4fb3bc147Mike Stump} // expected-warning {{function declared 'noreturn' should not return}}
8d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
9d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar// On K&R
10d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarint f1() __attribute__((noreturn));
11d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
12d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarint g0 __attribute__((noreturn)); // expected-warning {{'noreturn' attribute only applies to function types}}
13d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
14d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarint f2() __attribute__((noreturn(1, 2))); // expected-error {{attribute requires 0 argument(s)}}
15f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump
16f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stumpvoid f3() __attribute__((noreturn));
17f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stumpvoid f3() {
189dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor  return;  // expected-warning {{function 'f3' declared 'noreturn' should not return}}
19f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump}
20f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump
219dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor#pragma clang diagnostic error "-Winvalid-noreturn"
228662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner
238662587fa75d3fb04f873e265841c9314c7f5523Chris Lattnervoid f4() __attribute__((noreturn));
248662587fa75d3fb04f873e265841c9314c7f5523Chris Lattnervoid f4() {
259dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor  return;  // expected-error {{function 'f4' declared 'noreturn' should not return}}
268662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner}
278662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner
2847259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor// PR4685
2947259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorextern void f5 (unsigned long) __attribute__ ((__noreturn__));
3047259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor
3147259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorvoid
3247259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorf5 (unsigned long size)
3347259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor{
3447259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor
3529813c3509a0229947e35897a9a145c4fb3bc147Mike Stump}
36