diff options
author | Jason Merrill <jason@redhat.com> | 2011-11-17 16:00:30 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-11-17 16:00:30 -0500 |
commit | bb94892a9a0adf8e824881fec03f570464384b31 (patch) | |
tree | 5af81fafefe9ab2cc29cc58c313fb344a16e5cd8 /gcc | |
parent | f6546dbc89bb0c2a4f0667101c9c72c1bb90b129 (diff) | |
download | gcc-bb94892a9a0adf8e824881fec03f570464384b31.zip gcc-bb94892a9a0adf8e824881fec03f570464384b31.tar.gz gcc-bb94892a9a0adf8e824881fec03f570464384b31.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/decl.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/auto27.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/trailing2.C | 12 |
5 files changed, 31 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 89f845e..c5f2a7b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d744da8..b77963b 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7d94e14..fa4ab0d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/cpp0x/auto27.C b/gcc/testsuite/g++.dg/cpp0x/auto27.C new file mode 100644 index 0000000..c1041df --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto27.C @@ -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 } +{ } diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing2.C b/gcc/testsuite/g++.dg/cpp0x/trailing2.C index e45204f..5f5af22 100644 --- a/gcc/testsuite/g++.dg/cpp0x/trailing2.C +++ b/gcc/testsuite/g++.dg/cpp0x/trailing2.C @@ -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" } }; |