This revision was automatically updated to reflect the committed changes. Closed by commit rL343740: [SEMA] split ExtWarn dupl-decl-spec's into Extension and ExtWarn (authored by nickdesaulniers, committed by ). Herald added a subscriber: llvm-commits.
Repository: rL LLVM https://reviews.llvm.org/D52849 Files: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/lib/Sema/DeclSpec.cpp cfe/trunk/test/Sema/pr32985.c Index: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td @@ -192,7 +192,9 @@ "flexible array initialization is a GNU extension">, InGroup<GNUFlexibleArrayInitializer>; // Declarations. -def ext_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">, +def ext_duplicate_declspec : Extension<"duplicate '%0' declaration specifier">, + InGroup<DuplicateDeclSpecifier>; +def ext_warn_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">, InGroup<DuplicateDeclSpecifier>; def warn_duplicate_declspec : Warning<"duplicate '%0' declaration specifier">, InGroup<DuplicateDeclSpecifier>; Index: cfe/trunk/test/Sema/pr32985.c =================================================================== --- cfe/trunk/test/Sema/pr32985.c +++ cfe/trunk/test/Sema/pr32985.c @@ -0,0 +1,20 @@ +/* +RUN: %clang_cc1 %s -std=gnu89 -fsyntax-only 2>&1 | FileCheck -check-prefix=CHECK-GNU89 %s -allow-empty +RUN: %clang_cc1 %s -std=gnu89 -pedantic -fsyntax-only 2>&1 | FileCheck -check-prefix=CHECK-GNU89-PEDANTIC %s +*/ + +typedef const int t; +const t c_i; +/* +CHECK-GNU89-NOT: 7:1: warning: duplicate 'const' declaration specifier +CHECK-GNU89-PEDANTIC: 7:1: warning: duplicate 'const' declaration specifier +*/ + +const int c_i2; +const typeof(c_i2) c_i3; +/* +CHECK-GNU89-NOT: 14:7: warning: extension used +CHECK-GNU89-NOT: 14:1: warning: duplicate 'const' declaration specifier +CHECK-GNU89-PEDANTIC: 14:7: warning: extension used +CHECK-GNU89-PEDANTIC: 14:1: warning: duplicate 'const' declaration specifier +*/ Index: cfe/trunk/lib/Parse/ParseDecl.cpp =================================================================== --- cfe/trunk/lib/Parse/ParseDecl.cpp +++ cfe/trunk/lib/Parse/ParseDecl.cpp @@ -3838,7 +3838,8 @@ assert(PrevSpec && "Method did not return previous specifier!"); assert(DiagID); - if (DiagID == diag::ext_duplicate_declspec) + if (DiagID == diag::ext_duplicate_declspec || + DiagID == diag::ext_warn_duplicate_declspec) Diag(Tok, DiagID) << PrevSpec << FixItHint::CreateRemoval(Tok.getLocation()); else if (DiagID == diag::err_opencl_unknown_type_specifier) { Index: cfe/trunk/lib/Sema/DeclSpec.cpp =================================================================== --- cfe/trunk/lib/Sema/DeclSpec.cpp +++ cfe/trunk/lib/Sema/DeclSpec.cpp @@ -438,7 +438,7 @@ if (TNew != TPrev) DiagID = diag::err_invalid_decl_spec_combination; else - DiagID = IsExtension ? diag::ext_duplicate_declspec : + DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec; return true; } @@ -967,7 +967,7 @@ unsigned &DiagID) { if (isModulePrivateSpecified()) { PrevSpec = "__module_private__"; - DiagID = diag::ext_duplicate_declspec; + DiagID = diag::ext_warn_duplicate_declspec; return true; }
Index: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td @@ -192,7 +192,9 @@ "flexible array initialization is a GNU extension">, InGroup<GNUFlexibleArrayInitializer>; // Declarations. -def ext_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">, +def ext_duplicate_declspec : Extension<"duplicate '%0' declaration specifier">, + InGroup<DuplicateDeclSpecifier>; +def ext_warn_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">, InGroup<DuplicateDeclSpecifier>; def warn_duplicate_declspec : Warning<"duplicate '%0' declaration specifier">, InGroup<DuplicateDeclSpecifier>; Index: cfe/trunk/test/Sema/pr32985.c =================================================================== --- cfe/trunk/test/Sema/pr32985.c +++ cfe/trunk/test/Sema/pr32985.c @@ -0,0 +1,20 @@ +/* +RUN: %clang_cc1 %s -std=gnu89 -fsyntax-only 2>&1 | FileCheck -check-prefix=CHECK-GNU89 %s -allow-empty +RUN: %clang_cc1 %s -std=gnu89 -pedantic -fsyntax-only 2>&1 | FileCheck -check-prefix=CHECK-GNU89-PEDANTIC %s +*/ + +typedef const int t; +const t c_i; +/* +CHECK-GNU89-NOT: 7:1: warning: duplicate 'const' declaration specifier +CHECK-GNU89-PEDANTIC: 7:1: warning: duplicate 'const' declaration specifier +*/ + +const int c_i2; +const typeof(c_i2) c_i3; +/* +CHECK-GNU89-NOT: 14:7: warning: extension used +CHECK-GNU89-NOT: 14:1: warning: duplicate 'const' declaration specifier +CHECK-GNU89-PEDANTIC: 14:7: warning: extension used +CHECK-GNU89-PEDANTIC: 14:1: warning: duplicate 'const' declaration specifier +*/ Index: cfe/trunk/lib/Parse/ParseDecl.cpp =================================================================== --- cfe/trunk/lib/Parse/ParseDecl.cpp +++ cfe/trunk/lib/Parse/ParseDecl.cpp @@ -3838,7 +3838,8 @@ assert(PrevSpec && "Method did not return previous specifier!"); assert(DiagID); - if (DiagID == diag::ext_duplicate_declspec) + if (DiagID == diag::ext_duplicate_declspec || + DiagID == diag::ext_warn_duplicate_declspec) Diag(Tok, DiagID) << PrevSpec << FixItHint::CreateRemoval(Tok.getLocation()); else if (DiagID == diag::err_opencl_unknown_type_specifier) { Index: cfe/trunk/lib/Sema/DeclSpec.cpp =================================================================== --- cfe/trunk/lib/Sema/DeclSpec.cpp +++ cfe/trunk/lib/Sema/DeclSpec.cpp @@ -438,7 +438,7 @@ if (TNew != TPrev) DiagID = diag::err_invalid_decl_spec_combination; else - DiagID = IsExtension ? diag::ext_duplicate_declspec : + DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec; return true; } @@ -967,7 +967,7 @@ unsigned &DiagID) { if (isModulePrivateSpecified()) { PrevSpec = "__module_private__"; - DiagID = diag::ext_duplicate_declspec; + DiagID = diag::ext_warn_duplicate_declspec; return true; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits