[backport from gcc-4.7/trunk ] gcc/ 2011-11-30 Andrew Pinski PR c/51321 * c-parser.c (c_parser_postfix_expression): Check groktypename results before looking at the main variant. gcc/testsuite/ 2011-11-30 Andrew Pinski * gcc.dg/pr51321.c: New testcase. --- gcc-4.6.2/gcc/c-parser.c.~1~ 2011-01-19 22:59:47.000000000 +0100 +++ gcc-4.6.2/gcc/c-parser.c 2011-12-10 18:54:50.000000000 +0100 @@ -6366,9 +6366,16 @@ c_parser_postfix_expression (c_parser *p "expected %<)%>"); { tree e1, e2; + e1 = groktypename (t1, NULL, NULL); + e2 = groktypename (t2, NULL, NULL); + if (e1 == error_mark_node || e2 == error_mark_node) + { + expr.value = error_mark_node; + break; + } - e1 = TYPE_MAIN_VARIANT (groktypename (t1, NULL, NULL)); - e2 = TYPE_MAIN_VARIANT (groktypename (t2, NULL, NULL)); + e1 = TYPE_MAIN_VARIANT (e1); + e2 = TYPE_MAIN_VARIANT (e2); expr.value = comptypes (e1, e2) ? integer_one_node : integer_zero_node; --- gcc-4.6.2/gcc/testsuite/gcc.dg/pr51321.c.~1~ 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.6.2/gcc/testsuite/gcc.dg/pr51321.c 2011-12-10 18:55:26.000000000 +0100 @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +int main () +{ + return (__builtin_types_compatible_p (char[1][], char[1][1])); /* { dg-error "array type has incomplete element type" } */ +} + +