]> granicus.if.org Git - clang/commitdiff
Improve the diagnostic when the fixed underlying type of a
authorDouglas Gregor <dgregor@apple.com>
Wed, 1 Dec 2010 16:10:38 +0000 (16:10 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 1 Dec 2010 16:10:38 +0000 (16:10 +0000)
redeclaration of an enum type differs from that of the original
declaration, from Daniel Wallin

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120577 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp

index 3c5c9b32e50e1c0e86e039888e187654d2545c22..eb386fccee5325ed46663e63d2773c15e855efc7 100644 (file)
@@ -879,7 +879,7 @@ def ext_enumerator_too_large : ExtWarn<
 def err_enumerator_wrapped : Error<
   "enumerator value %0 is not representable in the underlying type %1">;
 def err_enum_redeclare_type_mismatch : Error<
-  "enumeration redeclared with different underlying type">;
+  "enumeration redeclared with different underlying type %0 (was %1)">;
 def err_enum_redeclare_fixed_mismatch : Error<
   "enumeration previously declared with %select{non|}0fixed underlying type">;
 def err_enum_redeclare_scoped_mismatch : Error<
index a3b8b8ec30f87ce1da0d473ea53794640e56836e..786a13f1d345eca777fbb7e422640f224ca91266 100644 (file)
@@ -5961,7 +5961,10 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
                 T = QualType(EnumUnderlying.get<const Type*>(), 0);
 
             if (!Context.hasSameUnqualifiedType(T, PrevEnum->getIntegerType())) {
-              Diag(KWLoc, diag::err_enum_redeclare_type_mismatch);
+              Diag(NameLoc.isValid() ? NameLoc : KWLoc, 
+                   diag::err_enum_redeclare_type_mismatch)
+                << T
+                << PrevEnum->getIntegerType();
               Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
               return PrevTagDecl;
             }