forked from OSchip/llvm-project
P0001R1: 'register' storage class specifier is no longer permitted in C++1z.
We will still allow it in system headers, in macros from system headers, when combined with an 'asm' label, and under the flag -Wno-register. llvm-svn: 254097
This commit is contained in:
parent
5941bde03c
commit
291027692f
|
@ -187,6 +187,8 @@ def CXX14Compat : DiagGroup<"c++14-compat", [CXXPre1zCompat]>;
|
|||
def CXX14CompatPedantic : DiagGroup<"c++14-compat-pedantic",
|
||||
[CXXPre1zCompatPedantic]>;
|
||||
|
||||
def CXX1zCompat : DiagGroup<"c++1z-compat", [DeprecatedRegister]>;
|
||||
|
||||
def : DiagGroup<"effc++">;
|
||||
def DivZero : DiagGroup<"division-by-zero">;
|
||||
def ExitTimeDestructors : DiagGroup<"exit-time-destructors">;
|
||||
|
@ -314,6 +316,7 @@ def : DiagGroup<"redundant-decls">;
|
|||
def RedeclaredClassMember : DiagGroup<"redeclared-class-member">;
|
||||
def GNURedeclaredEnum : DiagGroup<"gnu-redeclared-enum">;
|
||||
def RedundantMove : DiagGroup<"redundant-move">;
|
||||
def Register : DiagGroup<"register", [DeprecatedRegister]>;
|
||||
def ReturnStackAddress : DiagGroup<"return-stack-address">;
|
||||
def ReturnTypeCLinkage : DiagGroup<"return-type-c-linkage">;
|
||||
def ReturnType : DiagGroup<"return-type", [ReturnTypeCLinkage]>;
|
||||
|
|
|
@ -213,8 +213,11 @@ def warn_auto_storage_class : Warning<
|
|||
InGroup<CXX11Compat>, DefaultIgnore;
|
||||
|
||||
def warn_deprecated_register : Warning<
|
||||
"'register' storage class specifier is deprecated">,
|
||||
InGroup<DeprecatedRegister>;
|
||||
"'register' storage class specifier is deprecated "
|
||||
"and incompatible with C++1z">, InGroup<DeprecatedRegister>;
|
||||
def ext_register_storage_class : ExtWarn<
|
||||
"ISO C++1z does not allow 'register' storage class specifier">,
|
||||
DefaultError, InGroup<Register>;
|
||||
|
||||
def err_invalid_decl_spec_combination : Error<
|
||||
"cannot combine with previous '%0' declaration specifier">;
|
||||
|
|
|
@ -5709,7 +5709,8 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
|
|||
// Suppress the warning in system macros, it's used in macros in some
|
||||
// popular C system headers, such as in glibc's htonl() macro.
|
||||
Diag(D.getDeclSpec().getStorageClassSpecLoc(),
|
||||
diag::warn_deprecated_register)
|
||||
getLangOpts().CPlusPlus1z ? diag::ext_register_storage_class
|
||||
: diag::warn_deprecated_register)
|
||||
<< FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// RUN: %clang_cc1 -std=c++98 %s -Wdeprecated -verify -triple x86_64-linux-gnu
|
||||
// RUN: %clang_cc1 -std=c++11 %s -Wdeprecated -verify -triple x86_64-linux-gnu
|
||||
// RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify -triple x86_64-linux-gnu
|
||||
// RUN: %clang_cc1 -std=c++1z %s -Wdeprecated -verify -triple x86_64-linux-gnu
|
||||
|
||||
// RUN: %clang_cc1 -std=c++1y %s -Wdeprecated -verify -triple x86_64-linux-gnu -Wno-deprecated-register -DNO_DEPRECATED_FLAGS
|
||||
|
||||
|
@ -17,8 +18,10 @@ void h() throw(...);
|
|||
|
||||
void stuff() {
|
||||
register int n;
|
||||
#if __cplusplus >= 201103L && !defined(NO_DEPRECATED_FLAGS)
|
||||
// expected-warning@-2 {{'register' storage class specifier is deprecated}}
|
||||
#if __cplusplus > 201402L
|
||||
// expected-error@-2 {{ISO C++1z does not allow 'register' storage class specifier}}
|
||||
#elif __cplusplus >= 201103L && !defined(NO_DEPRECATED_FLAGS)
|
||||
// expected-warning@-4 {{'register' storage class specifier is deprecated}}
|
||||
#endif
|
||||
|
||||
register int m asm("rbx"); // no-warning
|
||||
|
|
|
@ -596,7 +596,7 @@ as the draft C++1z standard evolves.</p>
|
|||
<tr>
|
||||
<td>Remove deprecated <tt>register</tt> storage class</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0001r1.html">P0001R1</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
<td class="svn" align="center">Clang 3.8</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Remove deprecated <tt>bool</tt> increment</td>
|
||||
|
|
Loading…
Reference in New Issue