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