From 58df0426944c1bf8a80b6935bbea3815fc506474 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 17 Jun 2013 00:01:58 +0000 Subject: [PATCH] Add warning group -Wdeprecated-register for C++11 warning on 'register' being deprecated. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184068 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticGroups.td | 9 ++++++--- include/clang/Basic/DiagnosticParseKinds.td | 3 ++- test/SemaCXX/deprecated.cpp | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index c6a6fedefa..31b0b5623e 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -57,12 +57,15 @@ def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">; def AbstractFinalClass : DiagGroup<"abstract-final-class">; def DeprecatedDeclarations : DiagGroup<"deprecated-declarations">; +def DeprecatedImplementations :DiagGroup<"deprecated-implementations">; +def DeprecatedRegister : DiagGroup<"deprecated-register">; def DeprecatedWritableStr : DiagGroup<"deprecated-writable-strings">; -def Deprecated : DiagGroup<"deprecated", [ DeprecatedDeclarations] >, +// FIXME: Why are DeprecatedImplementations and DeprecatedWritableStr +// not in this group? +def Deprecated : DiagGroup<"deprecated", [DeprecatedDeclarations, + DeprecatedRegister]>, DiagCategory<"Deprecations">; -def DeprecatedImplementations :DiagGroup<"deprecated-implementations">; - def : DiagGroup<"disabled-optimization">; def : DiagGroup<"discard-qual">; def : DiagGroup<"div-by-zero">; diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 38c7c78a5c..4ffb34ba0f 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -310,7 +310,8 @@ def err_expected_class_name_not_template : def err_unspecified_vla_size_with_static : Error< "'static' may not be used with an unspecified variable length array size">; def warn_deprecated_register : Warning< - "'register' storage class specifier is deprecated">, InGroup; + "'register' storage class specifier is deprecated">, + InGroup; def err_expected_case_before_expression: Error< "expected 'case' keyword before expression">; diff --git a/test/SemaCXX/deprecated.cpp b/test/SemaCXX/deprecated.cpp index 75ec0bc419..5b56b03a00 100644 --- a/test/SemaCXX/deprecated.cpp +++ b/test/SemaCXX/deprecated.cpp @@ -2,6 +2,8 @@ // RUN: %clang_cc1 -std=c++11 %s -Wdeprecated -verify // RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify +// RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify -Wno-deprecated-register -DNO_DEPRECATED_FLAGS + #include "Inputs/register.h" void f() throw(); @@ -15,7 +17,7 @@ void h() throw(...); void stuff() { register int n; -#if __cplusplus >= 201103L +#if __cplusplus >= 201103L && !defined(NO_DEPRECATED_FLAGS) // expected-warning@-2 {{'register' storage class specifier is deprecated}} #endif -- 2.40.0