attr-deprecated.c revision 553905db4c758883345efa3c4c07e1dba2c74a2f
1ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner// RUN: clang %s -verify -fsyntax-only 2ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 3ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerint f() __attribute__((deprecated)); 4ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnervoid g() __attribute__((deprecated)); 5ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnervoid g(); 6ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 7b235caa53b6743fda9f749a8218760c024e4cf9eAnders Carlssonvoid z() __attribute__((bogusattr)); // expected-warning {{'bogusattr' attribute ignored}} 8ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 9ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerextern int var __attribute__((deprecated)); 10ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 11ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerint a() { 12ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner int (*ptr)() = f; // expected-warning {{'f' is deprecated}} 13ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner f(); // expected-warning {{'f' is deprecated}} 14ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 15ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // test if attributes propagate to functions 16ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner g(); // expected-warning {{'g' is deprecated}} 17ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 18ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner return var; // expected-warning {{'var' is deprecated}} 19ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner} 20ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 21ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner// test if attributes propagate to variables 22ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerextern int var; 23ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerint w() { 24ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner return var; // expected-warning {{'var' is deprecated}} 25ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner} 264238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 274238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint old_fn() __attribute__ ((deprecated)); 284238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint old_fn(); 294238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint (*fn_ptr)() = old_fn; // expected-warning {{'old_fn' is deprecated}} 304238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 314238254b9846589e401019349badbad9aa8b6fe6Chris Lattnerint old_fn() { 3261a0f17301f889260de739219c3e1d4c8039210eChris Lattner return old_fn()+1; // no warning, deprecated functions can use deprecated symbols. 334238254b9846589e401019349badbad9aa8b6fe6Chris Lattner} 344238254b9846589e401019349badbad9aa8b6fe6Chris Lattner 35cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner 36cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattnerstruct foo { 37cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner int x __attribute__((deprecated)); 38cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner}; 39cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner 40cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattnervoid test1(struct foo *F) { 41cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner ++F->x; // expected-warning {{'x' is deprecated}} 42cfdff38e8e931c0020dff10a32221d8fedb287a6Chris Lattner} 43553905db4c758883345efa3c4c07e1dba2c74a2fChris Lattner 44