patches/gcc/4.3.0/375-gcc43-pr35440.patch
changeset 552 4edbcdb17e3d
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/patches/gcc/4.3.0/375-gcc43-pr35440.patch	Tue Jun 10 22:10:40 2008 +0000
     1.3 @@ -0,0 +1,59 @@
     1.4 +Original patch from gentoo: gentoo/src/patchsets/gcc/4.3.0/gentoo/60_all_gcc43-pr35440.patch
     1.5 +2008-03-19  Jakub Jelinek  <jakub@redhat.com>
     1.6 +
     1.7 +	PR c/35440
     1.8 +	* c-pretty-print.c (pp_c_initializer_list): Handle CONSTRUCTOR
     1.9 +	for all types.
    1.10 +
    1.11 +	* gcc.dg/pr35440.c: New test.
    1.12 +
    1.13 +diff -durN gcc-4.3.0.orig/gcc/c-pretty-print.c gcc-4.3.0/gcc/c-pretty-print.c
    1.14 +--- gcc-4.3.0.orig/gcc/c-pretty-print.c	2008-01-29 14:59:59.000000000 +0100
    1.15 ++++ gcc-4.3.0/gcc/c-pretty-print.c	2008-06-10 14:44:54.000000000 +0200
    1.16 +@@ -1173,6 +1173,12 @@
    1.17 +   tree type = TREE_TYPE (e);
    1.18 +   const enum tree_code code = TREE_CODE (type);
    1.19 + 
    1.20 ++  if (TREE_CODE (e) == CONSTRUCTOR)
    1.21 ++    {
    1.22 ++      pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
    1.23 ++      return;
    1.24 ++    }
    1.25 ++
    1.26 +   switch (code)
    1.27 +     {
    1.28 +     case RECORD_TYPE:
    1.29 +@@ -1207,16 +1213,12 @@
    1.30 +     case VECTOR_TYPE:
    1.31 +       if (TREE_CODE (e) == VECTOR_CST)
    1.32 + 	pp_c_expression_list (pp, TREE_VECTOR_CST_ELTS (e));
    1.33 +-      else if (TREE_CODE (e) == CONSTRUCTOR)
    1.34 +-	pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
    1.35 +       else
    1.36 + 	break;
    1.37 +       return;
    1.38 + 
    1.39 +     case COMPLEX_TYPE:
    1.40 +-      if (TREE_CODE (e) == CONSTRUCTOR)
    1.41 +-	pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
    1.42 +-      else if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
    1.43 ++      if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
    1.44 + 	{
    1.45 + 	  const bool cst = TREE_CODE (e) == COMPLEX_CST;
    1.46 + 	  pp_expression (pp, cst ? TREE_REALPART (e) : TREE_OPERAND (e, 0));
    1.47 +diff -durN gcc-4.3.0.orig/gcc/testsuite/gcc.dg/pr35440.c gcc-4.3.0/gcc/testsuite/gcc.dg/pr35440.c
    1.48 +--- gcc-4.3.0.orig/gcc/testsuite/gcc.dg/pr35440.c	1970-01-01 01:00:00.000000000 +0100
    1.49 ++++ gcc-4.3.0/gcc/testsuite/gcc.dg/pr35440.c	2008-06-10 14:44:54.000000000 +0200
    1.50 +@@ -0,0 +1,12 @@
    1.51 ++/* PR c/35440 */
    1.52 ++/* { dg-do compile } */
    1.53 ++/* { dg-options "-std=gnu99" } */
    1.54 ++
    1.55 ++struct A {};
    1.56 ++struct B { int i; char j[2]; };
    1.57 ++
    1.58 ++void foo (void)
    1.59 ++{
    1.60 ++  (struct A){}();			/* { dg-error "called object" } */
    1.61 ++  (struct B){ .i = 2, .j[1] = 1 }();	/* { dg-error "called object" } */
    1.62 ++}