Index: cp/decl.c =================================================================== --- cp/decl.c (revision 237042) +++ cp/decl.c (working copy) @@ -12793,7 +12793,7 @@ xref_tag_1 (enum tag_types tag_code, tree name, && CLASSTYPE_IS_TEMPLATE (t)) { error ("redeclaration of %qT as a non-template", t); - error ("previous declaration %q+D", t); + inform (location_of (t), "previous declaration %qD", t); return error_mark_node; } @@ -13149,8 +13149,8 @@ start_enum (tree name, tree enumtype, tree underly { error_at (input_location, "scoped/unscoped mismatch " "in enum %q#T", enumtype); - error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), - "previous definition here"); + inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), + "previous definition here"); enumtype = error_mark_node; } else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type) @@ -13157,8 +13157,8 @@ start_enum (tree name, tree enumtype, tree underly { error_at (input_location, "underlying type mismatch " "in enum %q#T", enumtype); - error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), - "previous definition here"); + inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), + "previous definition here"); enumtype = error_mark_node; } else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype) @@ -13169,8 +13169,8 @@ start_enum (tree name, tree enumtype, tree underly { error_at (input_location, "different underlying type " "in enum %q#T", enumtype); - error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), - "previous definition here"); + inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), + "previous definition here"); underlying_type = NULL_TREE; } } Index: cp/parser.c =================================================================== --- cp/parser.c (revision 237042) +++ cp/parser.c (working copy) @@ -22008,8 +22008,8 @@ cp_parser_class_head (cp_parser* parser, { error_at (type_start_token->location, "redefinition of %q#T", type); - error_at (type_start_token->location, "previous definition of %q+#T", - type); + inform (location_of (type), "previous definition of %q#T", + type); type = NULL_TREE; goto done; } Index: testsuite/g++.dg/cpp0x/forw_enum10.C =================================================================== --- testsuite/g++.dg/cpp0x/forw_enum10.C (revision 237042) +++ testsuite/g++.dg/cpp0x/forw_enum10.C (working copy) @@ -3,7 +3,7 @@ //This error is diagnosed at instantiation time template struct S1 { - enum E : T; // { dg-error "previous definition" } + enum E : T; // { dg-message "previous definition" } enum E : int; // { dg-error "different underlying type" } }; template struct S1; // { dg-message "required from here" } @@ -24,7 +24,7 @@ template struct S3; template struct S4 { - enum E : T1; // { dg-error "previous definition" } + enum E : T1; // { dg-message "previous definition" } enum E : T2; // { dg-error "different underlying type" } }; template struct S4; // { dg-message "required from here" } Index: testsuite/g++.dg/cpp0x/forw_enum6.C =================================================================== --- testsuite/g++.dg/cpp0x/forw_enum6.C (revision 237042) +++ testsuite/g++.dg/cpp0x/forw_enum6.C (working copy) @@ -1,18 +1,18 @@ // { dg-do compile { target c++11 } } -enum class E1 : int; // { dg-error "previous definition" } +enum class E1 : int; // { dg-message "previous definition" } enum E1 : int; // { dg-error "scoped/unscoped mismatch" } -enum E2 : int; // { dg-error "previous definition" } +enum E2 : int; // { dg-message "previous definition" } enum class E2 : int; // { dg-error "scoped/unscoped mismatch" } enum struct E3 : int; enum class E3 : int; //ok -enum class E4 : int; // { dg-error "previous definition" } +enum class E4 : int; // { dg-message "previous definition" } enum class E4 : long; // { dg-error "different underlying type" } -enum E5 : int; // { dg-error "previous definition" } +enum E5 : int; // { dg-message "previous definition" } enum E5 : long; // { dg-error "different underlying type" } enum E6 : int; Index: testsuite/g++.dg/cpp0x/forw_enum8.C =================================================================== --- testsuite/g++.dg/cpp0x/forw_enum8.C (revision 237042) +++ testsuite/g++.dg/cpp0x/forw_enum8.C (working copy) @@ -11,7 +11,7 @@ template struct S1; //ok //This error is diagnosed at instantiation time template struct S2 { - enum E : int; // { dg-error "previous definition" } + enum E : int; // { dg-message "previous definition" } enum E : T; // { dg-error "different underlying type" } }; template struct S2; // { dg-message "required from here" } @@ -19,7 +19,7 @@ template struct S2; // { dg-message "requir //This error is diagnosed at compilation time template struct S3 { - enum E : int; // { dg-error "previous definition" } + enum E : int; // { dg-message "previous definition" } enum E : short; // { dg-error "different underlying type" } }; Index: testsuite/g++.dg/cpp0x/override2.C =================================================================== --- testsuite/g++.dg/cpp0x/override2.C (revision 237042) +++ testsuite/g++.dg/cpp0x/override2.C (working copy) @@ -38,7 +38,7 @@ int main() { D3 d; D4 d2; - struct B2 final{}; // { dg-error "previous definition" } + struct B2 final{}; // { dg-message "previous definition" } B2 final; // { dg-error "has a previous declaration|previously declared here" } B2 final2 = final; struct B2 {}; // { dg-error "redefinition" } @@ -47,7 +47,7 @@ int main() struct B2 final {}; // { dg-error "redefinition" } struct B2 override {}; // { dg-error "cannot specify 'override' for a class" } B2 override{}; // { dg-error "redeclaration" } - struct foo final {}; // { dg-error "previous definition" } + struct foo final {}; // { dg-message "previous definition" } struct foo final {}; // { dg-error "redefinition" } foo final; // { dg-error "conflicting declaration" } } Index: testsuite/g++.dg/parse/crash5.C =================================================================== --- testsuite/g++.dg/parse/crash5.C (revision 237042) +++ testsuite/g++.dg/parse/crash5.C (working copy) @@ -1,6 +1,6 @@ // { dg-options "-w" } -class QString { // { dg-error "previous definition" } +class QString { // { dg-message "previous definition" } QString (const QString & a); // { dg-message "QString::QString|candidate expects" } }; Index: testsuite/g++.dg/parse/error16.C =================================================================== --- testsuite/g++.dg/parse/error16.C (revision 237042) +++ testsuite/g++.dg/parse/error16.C (working copy) @@ -3,7 +3,7 @@ struct A { - struct B {}; // { dg-error "10:previous definition of 'struct A::B'" } + struct B {}; // { dg-message "10:previous definition of 'struct A::B'" } }; struct A::B{}; // { dg-error "11:redefinition of 'struct A::B'" } Index: testsuite/g++.dg/parse/error27.C =================================================================== --- testsuite/g++.dg/parse/error27.C (revision 237042) +++ testsuite/g++.dg/parse/error27.C (working copy) @@ -1,8 +1,8 @@ // { dg-options "-fshow-column -ansi -pedantic-errors -Wno-long-long" } // PR c++/20152 -struct KrSelectionMode { virtual void init() = 0; }; // { dg-error "8:previous definition of 'struct KrSelectionMode'" } -struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:previous definition of 'struct KrKDESelectionMode'" } +struct KrSelectionMode { virtual void init() = 0; }; // { dg-message "8:previous definition of 'struct KrSelectionMode'" } +struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-message "8:previous definition of 'struct KrKDESelectionMode'" } struct KrSelectionMode { virtual void init() = 0; }; // { dg-error "8:redefinition of 'struct KrSelectionMode'" } struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:redefinition of 'struct KrKDESelectionMode'" } KrKDESelectionMode krKDESelectionMode; Index: testsuite/g++.dg/template/qualttp15.C =================================================================== --- testsuite/g++.dg/template/qualttp15.C (revision 237042) +++ testsuite/g++.dg/template/qualttp15.C (working copy) @@ -12,7 +12,7 @@ template