diff options
| author | Chandler Carruth <chandlerc@gmail.com> | 2013-09-27 20:20:17 +0000 |
|---|---|---|
| committer | Chandler Carruth <chandlerc@gmail.com> | 2013-09-27 20:20:17 +0000 |
| commit | 09445c48362dd4906dd4ad28428d84e50c309cd9 (patch) | |
| tree | beb455d349ab24f16085dac30b4d89b1486fd7b1 /clang/test | |
| parent | dca0c7a5fbeafe27bcfc31703e00bf99c19533ea (diff) | |
| download | bcm5719-llvm-09445c48362dd4906dd4ad28428d84e50c309cd9.tar.gz bcm5719-llvm-09445c48362dd4906dd4ad28428d84e50c309cd9.zip | |
Implement N3760, support for the [[deprecated]] attribute.
This motion appears to have consensus in the C++ committee and is
expected to be voted into the C++14 draft tomorrow during the formal
vote.
No extension warning in C++11 as attributes not specified in the
standard using the standard syntax in C++11 have implementation defined
meaning, and we define the meaning proposed for C++14.
There is one bug exposed as we do not warn on a deprecated template
specialization. I've left a FIXME in the test case and will dig into
that next.
Also, I will add a few more exhaustive test cases of the other features
specified for this attribute in a follow-up commit.
llvm-svn: 191550
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp b/clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp new file mode 100644 index 00000000000..8309219f50f --- /dev/null +++ b/clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp @@ -0,0 +1,29 @@ +// RUN: %clang_cc1 -std=c++1y -verify %s + +class [[deprecated]] C {}; // expected-note {{declared here}} +C c; // expected-warning {{'C' is deprecated}} + +typedef int t [[deprecated]]; // expected-note {{declared here}} +t x = 42; // expected-warning {{'t' is deprecated}} + +[[deprecated]] int old = 42; // expected-note {{declared here}} +int use = old; // expected-warning {{'old' is deprecated}} + +struct S { [[deprecated]] int member = 42; } s; // expected-note {{declared here}} +int use2 = s.member; // expected-warning {{'member' is deprecated}} + +[[deprecated]] int f() { return 42; } // expected-note {{declared here}} +int use3 = f(); // expected-warning {{'f' is deprecated}} + +enum [[deprecated]] e { E }; // expected-note {{declared here}} +e my_enum; // expected-warning {{'e' is deprecated}} + +template <typename T> class X {}; +template <> class [[deprecated]] X<int> {}; +X<char> x1; +X<int> x2; // FIXME: no warning! + +template <typename T> class [[deprecated]] X2 {}; +template <> class X2<int> {}; +X2<char> x3; // FIXME: no warning! +X2<int> x4; |

