From 85fecbe2eab32649c3df3be595fafbc41977efee Mon Sep 17 00:00:00 2001 From: mpolacek Date: Fri, 24 Oct 2014 16:29:56 +0000 Subject: [PATCH] PR c/56980 * c-pretty-print.c (c_pretty_printer::simple_type_specifier): Don't print "struct"/"union"/"enum" for typedefed names. * gcc.dg/pr56980.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216674 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-pretty-print.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr56980.c | 24 ++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr56980.c diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 05254c81a1e..fb0e63bc7b4 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2014-10-24 Marek Polacek + + PR c/56980 + * c-pretty-print.c (c_pretty_printer::simple_type_specifier): Don't + print "struct"/"union"/"enum" for typedefed names. + 2014-10-23 Marek Polacek * c-ubsan.c (ubsan_instrument_shift): Perform the MINUS_EXPR diff --git a/gcc/c-family/c-pretty-print.c b/gcc/c-family/c-pretty-print.c index 3b2dbc19ea6..a4dd93d2a73 100644 --- a/gcc/c-family/c-pretty-print.c +++ b/gcc/c-family/c-pretty-print.c @@ -416,7 +416,9 @@ c_pretty_printer::simple_type_specifier (tree t) case UNION_TYPE: case RECORD_TYPE: case ENUMERAL_TYPE: - if (code == UNION_TYPE) + if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL) + /* Don't decorate the type if this is a typedef name. */; + else if (code == UNION_TYPE) pp_c_ws_string (this, "union"); else if (code == RECORD_TYPE) pp_c_ws_string (this, "struct"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3b35375affd..39d48718924 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-10-24 Marek Polacek + + PR c/56980 + * gcc.dg/pr56980.c: New test. + 2014-10-24 Jiong Wang * lib/target-supports.exp diff --git a/gcc/testsuite/gcc.dg/pr56980.c b/gcc/testsuite/gcc.dg/pr56980.c new file mode 100644 index 00000000000..f48379a79ec --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56980.c @@ -0,0 +1,24 @@ +/* PR c/56980 */ +/* { dg-do compile } */ + +typedef struct A { int i; } B; +typedef union U { int i; } V; +typedef enum E { G } F; + +void foo_s (struct A); /* { dg-message "expected .struct A. but argument is of type .B \\*." } */ +void foo_u (union U); /* { dg-message "expected .union U. but argument is of type .V \\*." } */ +void foo_e (enum E); /* { dg-message "expected .enum E. but argument is of type .F \\*." } */ +void foo_sp (B *); /* { dg-message "expected .B \\*. but argument is of type .struct B \\*." } */ +void foo_up (V *); /* { dg-message "expected .V \\*. but argument is of type .union V \\*." } */ +void foo_ep (F *); /* { dg-message "expected .F \\*. but argument is of type .enum F \\*." } */ + +void +bar (B *b, V *v, F *f) +{ + foo_s (b); /* { dg-error "incompatible" } */ + foo_u (v); /* { dg-error "incompatible" } */ + foo_e (f); /* { dg-error "incompatible" } */ + foo_sp ((struct B *) b); /* { dg-error "passing argument" } */ + foo_up ((union V *) v); /* { dg-error "passing argument" } */ + foo_ep (__extension__ (enum F *) f); /* { dg-error "passing argument" } */ +} -- 2.11.4.GIT