1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 %s -verify -fsyntax-only 2ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 3c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedmanint f() __attribute__((deprecated)); // expected-note 2 {{declared here}} 4ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnervoid g() __attribute__((deprecated)); 5350e956532d99ce2e804a478df5b6f1f5e096d88Fariborz Jahanianvoid g(); // expected-note {{declared here}} 6ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 7350e956532d99ce2e804a478df5b6f1f5e096d88Fariborz Jahanianextern int var __attribute__((deprecated)); // expected-note {{declared here}} 8ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 9ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerint a() { 10ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner int (*ptr)() = f; // expected-warning {{'f' is deprecated}} 11ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner f(); // expected-warning {{'f' is deprecated}} 12ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 13ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // test if attributes propagate to functions 14ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner g(); // expected-warning {{'g' is deprecated}} 15ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 16ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner return var; // expected-warning {{'var' is deprecated}} 17ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner} 18ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 19ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner// test if attributes propagate to variables 20350e956532d99ce2e804a478df5b6f1f5e096d88Fariborz Jahanianextern int var; // expected-note {{declared here}} 21ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerint w() { 221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return var; // expected-warning {{'var' is deprecated}} 23ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner} 244238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 254238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint old_fn() __attribute__ ((deprecated)); 26c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedmanint old_fn(); // expected-note {{declared here}} 274238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint (*fn_ptr)() = old_fn; // expected-warning {{'old_fn' is deprecated}} 284238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 294238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint old_fn() { 3061a0f17301f889260de739219c3e1d4c8039210eChris Lattner return old_fn()+1; // no warning, deprecated functions can use deprecated symbols. 314238254b9846589e401019349badbad9aa8b6fe6Chris Lattner} 324238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 33cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner 34cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattnerstruct foo { 35c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedman int x __attribute__((deprecated)); // expected-note 3 {{declared here}} 36cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner}; 37cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner 38cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattnervoid test1(struct foo *F) { 39cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner ++F->x; // expected-warning {{'x' is deprecated}} 4054001c1e6a87b792b0711b822def2b1bfe1ad4a1Douglas Gregor struct foo f1 = { .x = 17 }; // expected-warning {{'x' is deprecated}} 4154001c1e6a87b792b0711b822def2b1bfe1ad4a1Douglas Gregor struct foo f2 = { 17 }; // expected-warning {{'x' is deprecated}} 42cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner} 43553905db4c758883345efa3c4c07e1dba2c74a2fChris Lattner 44f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedmantypedef struct foo foo_dep __attribute__((deprecated)); // expected-note 12 {{declared here}} 4522bd905673a73ccb9b5e45a7038ec060c9650ffeChris Lattnerfoo_dep *test2; // expected-warning {{'foo_dep' is deprecated}} 46d451f836be2d2839f6ac87181c5a52f4f6be397eChris Lattner 47fc038e9ef8ed262724f42597ca5c844de97b1202Eli Friedmanstruct __attribute__((deprecated, 48c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedman invalid_attribute)) bar_dep ; // expected-warning {{unknown attribute 'invalid_attribute' ignored}} expected-note 2 {{declared here}} 49d451f836be2d2839f6ac87181c5a52f4f6be397eChris Lattner 50d451f836be2d2839f6ac87181c5a52f4f6be397eChris Lattnerstruct bar_dep *test3; // expected-warning {{'bar_dep' is deprecated}} 51d451f836be2d2839f6ac87181c5a52f4f6be397eChris Lattner 52523382640e9b099dd64ba0875a60a9356845b068Chris Lattner 53523382640e9b099dd64ba0875a60a9356845b068Chris Lattner// These should not warn because the actually declaration itself is deprecated. 54523382640e9b099dd64ba0875a60a9356845b068Chris Lattner// rdar://6756623 55523382640e9b099dd64ba0875a60a9356845b068Chris Lattnerfoo_dep *test4 __attribute__((deprecated)); 56523382640e9b099dd64ba0875a60a9356845b068Chris Lattnerstruct bar_dep *test5 __attribute__((deprecated)); 57523382640e9b099dd64ba0875a60a9356845b068Chris Lattner 5854abf7d4fa3123b8324c09d2a4dfb789fd818403John McCalltypedef foo_dep test6(struct bar_dep*); // expected-warning {{'foo_dep' is deprecated}} \ 5954abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall // expected-warning {{'bar_dep' is deprecated}} 6054abf7d4fa3123b8324c09d2a4dfb789fd818403John McCalltypedef foo_dep test7(struct bar_dep*) __attribute__((deprecated)); 6154abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 6254abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallint test8(char *p) { 6354abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall p += sizeof(foo_dep); // expected-warning {{'foo_dep' is deprecated}} 6454abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 6554abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall foo_dep *ptr; // expected-warning {{'foo_dep' is deprecated}} 6654abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall ptr = (foo_dep*) p; // expected-warning {{'foo_dep' is deprecated}} 6754abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 6854abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall int func(foo_dep *foo); // expected-warning {{'foo_dep' is deprecated}} 6954abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall return func(ptr); 7054abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall} 7154abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 7254abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallfoo_dep *test9(void) __attribute__((deprecated)); 7354abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallfoo_dep *test9(void) { 7454abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall void* myalloc(unsigned long); 7554abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 7654abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall foo_dep *ptr 7754abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall = (foo_dep*) 7854abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall myalloc(sizeof(foo_dep)); 7954abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall return ptr; 8054abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall} 8154abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 8254abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallvoid test10(void) __attribute__((deprecated)); 8354abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallvoid test10(void) { 8454abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall if (sizeof(foo_dep) == sizeof(void*)) { 8554abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall } 8654abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall foo_dep *localfunc(void); 8754abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall foo_dep localvar; 8854abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall} 8954abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 9054abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallchar test11[sizeof(foo_dep)] __attribute__((deprecated)); 9154abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallchar test12[sizeof(foo_dep)]; // expected-warning {{'foo_dep' is deprecated}} 9254abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 9354abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallint test13(foo_dep *foo) __attribute__((deprecated)); 9454abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallint test14(foo_dep *foo); // expected-warning {{'foo_dep' is deprecated}} 9554abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 9654abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallunsigned long test15 = sizeof(foo_dep); // expected-warning {{'foo_dep' is deprecated}} 9754abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallunsigned long test16 __attribute__((deprecated)) 9854abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall = sizeof(foo_dep); 9954abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall 10054abf7d4fa3123b8324c09d2a4dfb789fd818403John McCallfoo_dep test17, // expected-warning {{'foo_dep' is deprecated}} 10154abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall test18 __attribute__((deprecated)), 10254abf7d4fa3123b8324c09d2a4dfb789fd818403John McCall test19; 1035b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall 1045b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall// rdar://problem/8518751 105c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedmanenum __attribute__((deprecated)) Test20 { // expected-note {{declared here}} 106350e956532d99ce2e804a478df5b6f1f5e096d88Fariborz Jahanian test20_a __attribute__((deprecated)), // expected-note {{declared here}} 107350e956532d99ce2e804a478df5b6f1f5e096d88Fariborz Jahanian test20_b // expected-note {{declared here}} 1085b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall}; 1095b629aa86c987f276d00453b6c9ab8424f7903feJohn McCallvoid test20() { 1105b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall enum Test20 f; // expected-warning {{'Test20' is deprecated}} 1115b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall f = test20_a; // expected-warning {{'test20_a' is deprecated}} 11239b4fc888d2b9b8fe1a9c982964b5054ba1c3c73Fariborz Jahanian f = test20_b; // expected-warning {{'test20_b' is deprecated}} 1135b629aa86c987f276d00453b6c9ab8424f7903feJohn McCall} 1144820908be98f340a4c2a563a622ae693a7219c50John McCall 1154820908be98f340a4c2a563a622ae693a7219c50John McCallchar test21[__has_feature(attribute_deprecated_with_message) ? 1 : -1]; 116f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman 117f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedmanstruct test22 { 118f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman foo_dep a __attribute((deprecated)); 119f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman foo_dep b; // expected-warning {{'foo_dep' is deprecated}} 120f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman foo_dep c, d __attribute((deprecated)); // expected-warning {{'foo_dep' is deprecated}} 121f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman __attribute((deprecated)) foo_dep e, f; 122f66a0dda541cd859a928193efba6dc5d7ba8fe54Eli Friedman}; 123