Commit bb94892a by Jason Merrill Committed by Jason Merrill

re PR c++/51186 (declaring main() with auto but without --std=c++11 gives…

re PR c++/51186 (declaring main() with auto but without --std=c++11 gives inconsistent error messages)

	PR c++/51186
	* decl.c (grokdeclarator): Improve C++98 trailing return diagnostic.

From-SVN: r181455
parent f6546dbc
2011-11-17 Jason Merrill <jason@redhat.com> 2011-11-17 Jason Merrill <jason@redhat.com>
PR c++/51186
* decl.c (grokdeclarator): Improve C++98 trailing return diagnostic.
N3203 N3203
* class.c (add_implicitly_declared_members): Update move * class.c (add_implicitly_declared_members): Update move
conditions. conditions.
......
...@@ -9126,12 +9126,12 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -9126,12 +9126,12 @@ grokdeclarator (const cp_declarator *declarator,
if (!declarator->u.function.late_return_type) if (!declarator->u.function.late_return_type)
{ {
error ("%qs function uses %<auto%> type specifier without" error ("%qs function uses %<auto%> type specifier without"
" late return type", name); " trailing return type", name);
return error_mark_node; return error_mark_node;
} }
else if (!is_auto (type)) else if (!is_auto (type))
{ {
error ("%qs function with late return type has" error ("%qs function with trailing return type has"
" %qT as its type rather than plain %<auto%>", " %qT as its type rather than plain %<auto%>",
name, type); name, type);
return error_mark_node; return error_mark_node;
...@@ -9139,8 +9139,14 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -9139,8 +9139,14 @@ grokdeclarator (const cp_declarator *declarator,
} }
else if (declarator->u.function.late_return_type) else if (declarator->u.function.late_return_type)
{ {
error ("%qs function with late return type not declared" if (cxx_dialect < cxx0x)
" with %<auto%> type specifier", name); /* Not using maybe_warn_cpp0x because this should
always be an error. */
error ("trailing return type only available with "
"-std=c++11 or -std=gnu++11");
else
error ("%qs function with trailing return type not "
"declared with %<auto%> type specifier", name);
return error_mark_node; return error_mark_node;
} }
} }
......
2011-11-17 Jason Merrill <jason@redhat.com>
PR c++/51186
* g++.dg/cpp0x/auto27.C: New.
* g++.dg/cpp0x/trailing2.C: Adjust messages.
2011-11-17 Andrew MacLeod <amacleod@redhat.com> 2011-11-17 Andrew MacLeod <amacleod@redhat.com>
* gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if * gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if
......
// PR c++/51186
auto main()->int // { dg-error "std=" "" { target c++98 } }
// { dg-error "auto" "" { target c++98 } 3 }
// { dg-error "no type" "" { target c++98 } 3 }
{ }
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
// { dg-options "-std=c++0x" } // { dg-options "-std=c++0x" }
auto f1 () -> int; auto f1 () -> int;
auto f2 (); // { dg-error "without late return type" } auto f2 (); // { dg-error "without trailing return type" }
int f3 () -> int; // { dg-error "late return type" } int f3 () -> int; // { dg-error "trailing return type" }
auto *f4 () -> int; // { dg-error "late return type" } auto *f4 () -> int; // { dg-error "trailing return type" }
struct A struct A
{ {
auto f5 () const -> int; auto f5 () const -> int;
auto f6 (); // { dg-error "without late return type" } auto f6 (); // { dg-error "without trailing return type" }
int f7 () -> int; // { dg-error "late return type" } int f7 () -> int; // { dg-error "trailing return type" }
auto *f8 () -> int; // { dg-error "late return type" } auto *f8 () -> int; // { dg-error "trailing return type" }
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment