summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2015-04-30 09:35:05 +0000
committermpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2015-04-30 09:35:05 +0000
commit98f44804b62d82cefc77c372bca21fa72859003b (patch)
treed6bafc73f07c3c0bb3449ddd288ff6407ffd6869
parent6fa7118e0d48ef77498418b03dab0f6092f6596e (diff)
downloadgcc-98f44804b62d82cefc77c372bca21fa72859003b.tar.gz
* c-typeck.c (c_incomplete_type_error): Refactor to use %qT. Print
the type of a decl. * gcc.dg/incomplete-typedef-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222614 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/c/ChangeLog3
-rw-r--r--gcc/c/c-typeck.c16
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/gcc.dg/incomplete-typedef-1.c12
4 files changed, 20 insertions, 13 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 0ee7f1bb823..3894bb9cbe1 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -3,6 +3,9 @@
* c-typeck.c (set_init_label): Call error_at instead of error and
pass LOC to it.
+ * c-typeck.c (c_incomplete_type_error): Refactor to use %qT. Print
+ the type of a decl.
+
2015-04-29 Thomas Schwinge <thomas@codesourcery.com>
* c-parser.c (c_parser_oacc_enter_exit_data): Use
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 466079f42c5..413cd07b2e3 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -229,15 +229,13 @@ require_complete_type (tree value)
void
c_incomplete_type_error (const_tree value, const_tree type)
{
- const char *type_code_string;
-
/* Avoid duplicate error message. */
if (TREE_CODE (type) == ERROR_MARK)
return;
if (value != 0 && (TREE_CODE (value) == VAR_DECL
|| TREE_CODE (value) == PARM_DECL))
- error ("%qD has an incomplete type", value);
+ error ("%qD has an incomplete type %qT", value, type);
else
{
retry:
@@ -246,15 +244,8 @@ c_incomplete_type_error (const_tree value, const_tree type)
switch (TREE_CODE (type))
{
case RECORD_TYPE:
- type_code_string = "struct";
- break;
-
case UNION_TYPE:
- type_code_string = "union";
- break;
-
case ENUMERAL_TYPE:
- type_code_string = "enum";
break;
case VOID_TYPE:
@@ -280,11 +271,10 @@ c_incomplete_type_error (const_tree value, const_tree type)
}
if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
- error ("invalid use of undefined type %<%s %E%>",
- type_code_string, TYPE_NAME (type));
+ error ("invalid use of undefined type %qT", type);
else
/* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
- error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
+ error ("invalid use of incomplete typedef %qT", type);
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 861077bab8b..29e177ee352 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,6 +2,8 @@
* gcc.dg/init-bad-8.c: New test.
+ * gcc.dg/incomplete-typedef-1.c: New test.
+
2015-04-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/59955
diff --git a/gcc/testsuite/gcc.dg/incomplete-typedef-1.c b/gcc/testsuite/gcc.dg/incomplete-typedef-1.c
new file mode 100644
index 00000000000..622bf650421
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/incomplete-typedef-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+typedef struct S TS;
+typedef union U TU;
+
+void
+foo (void)
+{
+ (TS) { }; /* { dg-error "invalid use of incomplete typedef" } */
+ (TU) { }; /* { dg-error "invalid use of incomplete typedef" } */
+}