diff options
Diffstat (limited to 'gcc/cp/error.c')
-rw-r--r-- | gcc/cp/error.c | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 7266d8872d5..e0e5ae52ceb 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -568,10 +568,11 @@ dump_aggr_type (tree t, int flags) { typdef = !DECL_ARTIFICIAL (name); - if (typdef - && ((flags & TFF_CHASE_TYPEDEF) - || (!flag_pretty_templates && DECL_LANG_SPECIFIC (name) - && DECL_TEMPLATE_INFO (name)))) + if ((typdef + && ((flags & TFF_CHASE_TYPEDEF) + || (!flag_pretty_templates && DECL_LANG_SPECIFIC (name) + && DECL_TEMPLATE_INFO (name)))) + || DECL_SELF_REFERENCE_P (name)) { t = TYPE_MAIN_VARIANT (t); name = TYPE_NAME (t); @@ -2885,20 +2886,57 @@ cp_printer (pretty_printer *pp, text_info *text, const char *spec, /* Warn about the use of C++0x features when appropriate. */ void -maybe_warn_cpp0x (const char* str) +maybe_warn_cpp0x (cpp0x_warn_str str) { if ((cxx_dialect == cxx98) && !in_system_header) /* We really want to suppress this warning in system headers, because libstdc++ uses variadic templates even when we aren't in C++0x mode. */ - pedwarn (input_location, 0, "%s only available with -std=c++0x or -std=gnu++0x", str); + switch (str) + { + case CPP0X_INITIALIZER_LISTS: + pedwarn (input_location, 0, + "extended initializer lists " + "only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_EXPLICIT_CONVERSION: + pedwarn (input_location, 0, + "explicit conversion operators " + "only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_VARIADIC_TEMPLATES: + pedwarn (input_location, 0, + "variadic templates " + "only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_LAMBDA_EXPR: + pedwarn (input_location, 0, + "lambda expressions " + "only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_AUTO: + pedwarn (input_location, 0, + "C++0x auto only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_SCOPED_ENUMS: + pedwarn (input_location, 0, + "scoped enums only available with -std=c++0x or -std=gnu++0x"); + break; + case CPP0X_DEFAULTED_DELETED: + pedwarn (input_location, 0, + "defaulted and deleted functions " + "only available with -std=c++0x or -std=gnu++0x"); + break; + default: + gcc_unreachable(); + } } /* Warn about the use of variadic templates when appropriate. */ void maybe_warn_variadic_templates (void) { - maybe_warn_cpp0x ("variadic templates"); + maybe_warn_cpp0x (CPP0X_VARIADIC_TEMPLATES); } |