c-typeck.c (c_incomplete_type_error): Refactor to use %qT.

* 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.

From-SVN: r222614
This commit is contained in:
Marek Polacek 2015-04-30 09:35:05 +00:00 committed by Marek Polacek
parent 9babc35248
commit ac9f18db1b
4 changed files with 20 additions and 13 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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

View File

@ -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" } */
}