aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-11-17 16:00:30 -0500
committerJason Merrill <jason@gcc.gnu.org>2011-11-17 16:00:30 -0500
commitbb94892a9a0adf8e824881fec03f570464384b31 (patch)
tree5af81fafefe9ab2cc29cc58c313fb344a16e5cd8 /gcc
parentf6546dbc89bb0c2a4f0667101c9c72c1bb90b129 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/decl.c14
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto27.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing2.C12
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" }
};