• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // rdar: //6734520
3 
4 int foo(int)  __attribute__((__unavailable__("USE IFOO INSTEAD"))); // expected-note {{function has been explicitly marked unavailable here}}
5 double dfoo(double)  __attribute__((__unavailable__("NO LONGER"))); // expected-note 2 {{function has been explicitly marked unavailable here}}
6 
7 void bar() __attribute__((__unavailable__)); // expected-note {{explicitly marked unavailable}}
8 
test_foo()9 void 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 
18 char test2[__has_feature(attribute_unavailable_with_message) ? 1 : -1];
19 
20 // rdar://9623855
21 void unavail(void)  __attribute__((__unavailable__));
unavail(void)22 void 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
31 enum foo {
32     a = 1, // expected-note {{declared here}}
33     b __attribute__((deprecated())) = 2, // expected-note {{declared here}}
34     c = 3
35 }__attribute__((deprecated()));
36 
37 enum 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 
f()43 enum fee f() { // expected-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