]> granicus.if.org Git - clang/commitdiff
Add warning flag for "partial specialization is not more specialized than primary...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 27 Dec 2016 20:03:09 +0000 (20:03 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 27 Dec 2016 20:03:09 +0000 (20:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290625 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaTemplate.cpp
test/Misc/warning-flags.c

index 756f5a14d795d336bfc0996eafe7b8c0612c0400..45ef7e3094338154d84d2346e2b8c6728bbfa0ae 100644 (file)
@@ -4043,14 +4043,16 @@ def err_partial_spec_args_match_primary_template : Error<
     "%select{class|variable}0 template partial specialization does not "
     "specialize any template argument; to %select{declare|define}1 the "
     "primary template, remove the template argument list">; 
-def err_partial_spec_not_more_specialized_than_primary : Error<
+def ext_partial_spec_not_more_specialized_than_primary : ExtWarn<
     "%select{class|variable}0 template partial specialization is not "
-    "more specialized than the primary template">; 
+    "more specialized than the primary template">, DefaultError,
+    InGroup<DiagGroup<"invalid-partial-specialization">>;
 def note_partial_spec_not_more_specialized_than_primary : Note<"%0">;
 def warn_partial_specs_not_deducible : Warning<
     "%select{class|variable}0 template partial specialization contains "
     "%select{a template parameter|template parameters}1 that cannot be "
-    "deduced; this partial specialization will never be used">;
+    "deduced; this partial specialization will never be used">,
+    InGroup<DiagGroup<"unusable-partial-specialization">>;
 def note_partial_spec_unused_parameter : Note<
     "non-deducible template parameter %0">;
 def err_partial_spec_ordering_ambiguous : Error<
index b335e7e2602e1f7d06f83dc89311b8e7725d20a7..5a3083ce3bc04b56cad7d5d625981ad10b55b94f 100644 (file)
@@ -2637,8 +2637,8 @@ static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {
 
   auto *Template = Partial->getSpecializedTemplate();
   S.Diag(Partial->getLocation(),
-         diag::err_partial_spec_not_more_specialized_than_primary)
-      << /*variable template*/isa<VarTemplateDecl>(Template);
+         diag::ext_partial_spec_not_more_specialized_than_primary)
+      << isa<VarTemplateDecl>(Template);
 
   if (Info.hasSFINAEDiagnostic()) {
     PartialDiagnosticAt Diag = {SourceLocation(),
index 1a33265e4c25d6537b1fc39d251d5545a917da67..be02e12e2cbb8072d59585a915d9039e2b429d34 100644 (file)
@@ -18,7 +18,7 @@ This test serves two purposes:
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (79):
+CHECK: Warnings without flags (78):
 CHECK-NEXT:   ext_excess_initializers
 CHECK-NEXT:   ext_excess_initializers_in_char_array_initializer
 CHECK-NEXT:   ext_expected_semi_decl_list
@@ -78,7 +78,6 @@ CHECK-NEXT:   warn_not_compound_assign
 CHECK-NEXT:   warn_objc_property_copy_missing_on_block
 CHECK-NEXT:   warn_objc_protocol_qualifier_missing_id
 CHECK-NEXT:   warn_on_superclass_use
-CHECK-NEXT:   warn_partial_specs_not_deducible
 CHECK-NEXT:   warn_pp_convert_to_positive
 CHECK-NEXT:   warn_pp_expr_overflow
 CHECK-NEXT:   warn_pp_line_decimal