attr-unavailable-message.c revision 39b4fc888d2b9b8fe1a9c982964b5054ba1c3c73
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2// rdar: //6734520 3 4int foo(int) __attribute__((__unavailable__("USE IFOO INSTEAD"))); // expected-note {{function has been explicitly marked unavailable here}} 5double dfoo(double) __attribute__((__unavailable__("NO LONGER"))); // expected-note 2 {{function has been explicitly marked unavailable here}} 6 7void bar() __attribute__((__unavailable__)); // expected-note {{explicitly marked unavailable}} 8 9void test_foo() { 10 int ir = foo(1); // expected-error {{'foo' is unavailable: USE IFOO INSTEAD}} 11 double dr = dfoo(1.0); // expected-error {{'dfoo' is unavailable: NO LONGER}} 12 13 void (*fp)() = &bar; // expected-error {{'bar' is unavailable}} 14 15 double (*fp4)(double) = dfoo; // expected-error {{'dfoo' is unavailable: NO LONGER}} 16} 17 18char test2[__has_feature(attribute_unavailable_with_message) ? 1 : -1]; 19 20// rdar://9623855 21void unavail(void) __attribute__((__unavailable__)); 22void unavail(void) { 23 // No complains inside an unavailable function. 24 int ir = foo(1); 25 double dr = dfoo(1.0); 26 void (*fp)() = &bar; 27 double (*fp4)(double) = dfoo; 28} 29 30// rdar://10201690 31enum foo { 32 a = 1, 33 b __attribute__((deprecated())) = 2, 34 c = 3 35}__attribute__((deprecated())); 36 37enum fee { // expected-note {{declaration has been explicitly marked unavailable here}} 38 r = 1, // expected-note {{declaration has been explicitly marked unavailable here}} 39 s = 2, 40 t = 3 41}__attribute__((unavailable())); 42 43enum fee f() { // expected-error {{error: 'fee' is unavailable}} 44 int i = a; // expected-warning {{'a' is deprecated }} 45 46 i = b; // expected-warning {{'b' is deprecated}} 47 48 return r; // expected-error {{'r' is unavailable}} 49} 50