patches/gcc/4.3.0/210-pr35440.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 746 b150d6f590fc
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
yann@552
     1
Original patch from gentoo: gentoo/src/patchsets/gcc/4.3.0/gentoo/60_all_gcc43-pr35440.patch
yann@552
     2
2008-03-19  Jakub Jelinek  <jakub@redhat.com>
yann@552
     3
yann@552
     4
	PR c/35440
yann@552
     5
	* c-pretty-print.c (pp_c_initializer_list): Handle CONSTRUCTOR
yann@552
     6
	for all types.
yann@552
     7
yann@552
     8
	* gcc.dg/pr35440.c: New test.
yann@552
     9
yann@552
    10
diff -durN gcc-4.3.0.orig/gcc/c-pretty-print.c gcc-4.3.0/gcc/c-pretty-print.c
yann@552
    11
--- gcc-4.3.0.orig/gcc/c-pretty-print.c	2008-01-29 14:59:59.000000000 +0100
yann@552
    12
+++ gcc-4.3.0/gcc/c-pretty-print.c	2008-06-10 14:44:54.000000000 +0200
yann@552
    13
@@ -1173,6 +1173,12 @@
yann@552
    14
   tree type = TREE_TYPE (e);
yann@552
    15
   const enum tree_code code = TREE_CODE (type);
yann@552
    16
 
yann@552
    17
+  if (TREE_CODE (e) == CONSTRUCTOR)
yann@552
    18
+    {
yann@552
    19
+      pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
yann@552
    20
+      return;
yann@552
    21
+    }
yann@552
    22
+
yann@552
    23
   switch (code)
yann@552
    24
     {
yann@552
    25
     case RECORD_TYPE:
yann@552
    26
@@ -1207,16 +1213,12 @@
yann@552
    27
     case VECTOR_TYPE:
yann@552
    28
       if (TREE_CODE (e) == VECTOR_CST)
yann@552
    29
 	pp_c_expression_list (pp, TREE_VECTOR_CST_ELTS (e));
yann@552
    30
-      else if (TREE_CODE (e) == CONSTRUCTOR)
yann@552
    31
-	pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
yann@552
    32
       else
yann@552
    33
 	break;
yann@552
    34
       return;
yann@552
    35
 
yann@552
    36
     case COMPLEX_TYPE:
yann@552
    37
-      if (TREE_CODE (e) == CONSTRUCTOR)
yann@552
    38
-	pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
yann@552
    39
-      else if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
yann@552
    40
+      if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
yann@552
    41
 	{
yann@552
    42
 	  const bool cst = TREE_CODE (e) == COMPLEX_CST;
yann@552
    43
 	  pp_expression (pp, cst ? TREE_REALPART (e) : TREE_OPERAND (e, 0));
yann@552
    44
diff -durN gcc-4.3.0.orig/gcc/testsuite/gcc.dg/pr35440.c gcc-4.3.0/gcc/testsuite/gcc.dg/pr35440.c
yann@552
    45
--- gcc-4.3.0.orig/gcc/testsuite/gcc.dg/pr35440.c	1970-01-01 01:00:00.000000000 +0100
yann@552
    46
+++ gcc-4.3.0/gcc/testsuite/gcc.dg/pr35440.c	2008-06-10 14:44:54.000000000 +0200
yann@552
    47
@@ -0,0 +1,12 @@
yann@552
    48
+/* PR c/35440 */
yann@552
    49
+/* { dg-do compile } */
yann@552
    50
+/* { dg-options "-std=gnu99" } */
yann@552
    51
+
yann@552
    52
+struct A {};
yann@552
    53
+struct B { int i; char j[2]; };
yann@552
    54
+
yann@552
    55
+void foo (void)
yann@552
    56
+{
yann@552
    57
+  (struct A){}();			/* { dg-error "called object" } */
yann@552
    58
+  (struct B){ .i = 2, .j[1] = 1 }();	/* { dg-error "called object" } */
yann@552
    59
+}