1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -verify -fsyntax-only %s
2d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
3d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarstatic void (*fp0)(void) __attribute__((noreturn));
4d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
5e030358cc06e1cbce3c2e00ca67c946f9164b2a8Chris Lattnervoid fatal();
6e030358cc06e1cbce3c2e00ca67c946f9164b2a8Chris Lattner
7d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbarstatic void __attribute__((noreturn)) f0(void) {
8d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar  fatal();
929813c3509a0229947e35897a9a145c4fb3bc147Mike Stump} // expected-warning {{function declared 'noreturn' should not return}}
10d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
11d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar// On K&R
125d1d7ae120c2c8e6cba5d2a712b33500a5aecc10Anders Carlssonint f1() __attribute__((noreturn));
13d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
1404a67a6aa3dfdc92d57f7f8d93ba397348c868a4John McCallint g0 __attribute__((noreturn)); // expected-warning {{'noreturn' only applies to function types; type here is 'int'}}
15d3f2c10f881311831a84114179342ff4db55e0c3Daniel Dunbar
16baec77865b3ce64bb942dddc5dc2fada84ce5099Aaron Ballmanint f2() __attribute__((noreturn(1, 2))); // expected-error {{'noreturn' attribute takes no arguments}}
17f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump
18f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stumpvoid f3() __attribute__((noreturn));
19f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stumpvoid f3() {
209dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor  return;  // expected-warning {{function 'f3' declared 'noreturn' should not return}}
21f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump}
22f7c41dab1a8de29b0991e853b8822bb0d1ddc01cMike Stump
239dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor#pragma clang diagnostic error "-Winvalid-noreturn"
248662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner
258662587fa75d3fb04f873e265841c9314c7f5523Chris Lattnervoid f4() __attribute__((noreturn));
268662587fa75d3fb04f873e265841c9314c7f5523Chris Lattnervoid f4() {
279dc9c376a9f3e0c72f33e27075caa0647dadb350Douglas Gregor  return;  // expected-error {{function 'f4' declared 'noreturn' should not return}}
288662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner}
298662587fa75d3fb04f873e265841c9314c7f5523Chris Lattner
3047259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor// PR4685
3147259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorextern void f5 (unsigned long) __attribute__ ((__noreturn__));
3247259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor
3347259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorvoid
3447259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregorf5 (unsigned long size)
3547259d9ca7840dd66f06f5f11da7768b23d1e0fdDouglas Gregor{
36baec77865b3ce64bb942dddc5dc2fada84ce5099Aaron Ballman
3729813c3509a0229947e35897a9a145c4fb3bc147Mike Stump}
38edd722e38b883236c9f214d5df309110500b3529Mike Stump
39edd722e38b883236c9f214d5df309110500b3529Mike Stump// PR2461
40edd722e38b883236c9f214d5df309110500b3529Mike Stump__attribute__((noreturn)) void f(__attribute__((noreturn)) void (*x)(void)) {
41edd722e38b883236c9f214d5df309110500b3529Mike Stump  x();
42edd722e38b883236c9f214d5df309110500b3529Mike Stump}
43b1f1b267351be74013f966f4834cde1eddbe0233Abramo Bagnara
44baec77865b3ce64bb942dddc5dc2fada84ce5099Aaron Ballmantypedef void (*Fun)(void) __attribute__ ((noreturn(2))); // expected-error {{'noreturn' attribute takes no arguments}}
45