From: Marek Polacek Date: Thu, 30 Apr 2015 09:35:05 +0000 (+0000) Subject: c-typeck.c (c_incomplete_type_error): Refactor to use %qT. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac9f18db1b0c465646a4aa9566528045c9e4c973;p=gcc.git 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 --- 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 * 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 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" } */ +}