https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72806
Manuel López-Ibáñez <manu at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |easyhack Status|UNCONFIRMED |NEW Last reconfirmed| |2016-08-04 CC| |manu at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- The code here: if (alias_template_specialization_p (type)) error ("using alias template specialization %qT after %qs", type, tag_name (tag_code)); else error ("using typedef-name %qD after %qs", decl, tag_name (tag_code)); inform (DECL_SOURCE_LOCATION (decl), "%qD has a previous declaration here", decl); needs to check for DECL_IS_BUILTIN(decl) or something similar. Also, for consistency, it would be better to say: "%q#D previously declared here". Perhaps: inform (DECL_SOURCE_LOCATION (decl), DECL_IS_BUILTIN(decl) ? _G("%q#D is a built-in type") : _G("%q#D previously declared here"), decl); In theory, the diagnostics machinery should print <built-in>: note: message if DECL_SOURCE_LOCATION (decl) == BUILTINS_LOCATION. I wonder if the location is wrong (perhaps UNKNOWN_LOCATION?) or the C++ FE (unintentionally?) overrides the default location prefix for built-in.