diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 098e475f65d5..4adb89e4aaf1 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -12243,11 +12243,9 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs, error_at (loc, "two or more data types in declaration specifiers"); else if (TREE_CODE (type) == TYPE_DECL) { - if (TREE_TYPE (type) == error_mark_node) - ; /* Allow the type to default to int to avoid cascading errors. */ - else + specs->type = TREE_TYPE (type); + if (TREE_TYPE (type) != error_mark_node) { - specs->type = TREE_TYPE (type); specs->decl_attr = DECL_ATTRIBUTES (type); specs->typedef_p = true; specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type); diff --git a/gcc/testsuite/gcc.dg/pr107805-1.c b/gcc/testsuite/gcc.dg/pr107805-1.c new file mode 100644 index 000000000000..559b6a5586eb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr107805-1.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +typedef int t; +typedef struct { double a; int b; } t; /* { dg-error "conflicting types" } */ +t x; /* No warning here. */ + diff --git a/gcc/testsuite/gcc.dg/pr107805-2.c b/gcc/testsuite/gcc.dg/pr107805-2.c new file mode 100644 index 000000000000..fa5fa4ce2733 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr107805-2.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +typedef int t; +typedef struct { double a; int b; } t; /* { dg-error "conflicting types" } */ +t char x; /* { dg-error "two or more data types" } */