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
This commit is contained in:
parent
f6546dbc89
commit
bb94892a9a
@ -1,5 +1,8 @@
|
||||
2011-11-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51186
|
||||
* decl.c (grokdeclarator): Improve C++98 trailing return diagnostic.
|
||||
|
||||
N3203
|
||||
* class.c (add_implicitly_declared_members): Update move
|
||||
conditions.
|
||||
|
@ -9126,12 +9126,12 @@ grokdeclarator (const cp_declarator *declarator,
|
||||
if (!declarator->u.function.late_return_type)
|
||||
{
|
||||
error ("%qs function uses %<auto%> type specifier without"
|
||||
" late return type", name);
|
||||
" trailing return type", name);
|
||||
return error_mark_node;
|
||||
}
|
||||
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%>",
|
||||
name, type);
|
||||
return error_mark_node;
|
||||
@ -9139,8 +9139,14 @@ grokdeclarator (const cp_declarator *declarator,
|
||||
}
|
||||
else if (declarator->u.function.late_return_type)
|
||||
{
|
||||
error ("%qs function with late return type not declared"
|
||||
" with %<auto%> type specifier", name);
|
||||
if (cxx_dialect < cxx0x)
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
* gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if
|
||||
|
6
gcc/testsuite/g++.dg/cpp0x/auto27.C
Normal file
6
gcc/testsuite/g++.dg/cpp0x/auto27.C
Normal file
@ -0,0 +1,6 @@
|
||||
// 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 @@
|
||||
// { dg-options "-std=c++0x" }
|
||||
|
||||
auto f1 () -> int;
|
||||
auto f2 (); // { dg-error "without late return type" }
|
||||
int f3 () -> int; // { dg-error "late return type" }
|
||||
auto *f4 () -> int; // { dg-error "late return type" }
|
||||
auto f2 (); // { dg-error "without trailing return type" }
|
||||
int f3 () -> int; // { dg-error "trailing return type" }
|
||||
auto *f4 () -> int; // { dg-error "trailing return type" }
|
||||
|
||||
struct A
|
||||
{
|
||||
auto f5 () const -> int;
|
||||
auto f6 (); // { dg-error "without late return type" }
|
||||
int f7 () -> int; // { dg-error "late return type" }
|
||||
auto *f8 () -> int; // { dg-error "late return type" }
|
||||
auto f6 (); // { dg-error "without trailing return type" }
|
||||
int f7 () -> int; // { dg-error "trailing return type" }
|
||||
auto *f8 () -> int; // { dg-error "trailing return type" }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user