X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Ftree-sra.c;h=85217ece07ae17429f552912e94588b6880adc38;hp=5ae1c51350c86b2a3cd3c6a2629744f5da333e61;hb=b4f27588efdec6bf0633e905da54d0d6cd48c1de;hpb=89289466d8f9ce068b34558fb4224f6f0d58aefc diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 5ae1c51350c..85217ece07a 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2779,6 +2779,12 @@ generate_element_init_1 (struct sra_elt *elt, tree init, gimple_seq *seq_p) case CONSTRUCTOR: FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx, purpose, value) { + /* Array constructors are routinely created with NULL indices. */ + if (purpose == NULL_TREE) + { + result = false; + break; + } if (TREE_CODE (purpose) == RANGE_EXPR) { tree lower = TREE_OPERAND (purpose, 0); @@ -3404,11 +3410,6 @@ scalarize_init (struct sra_elt *lhs_elt, tree rhs, gimple_stmt_iterator *gsi) result = generate_element_init (lhs_elt, rhs, &init_seq); } - /* CONSTRUCTOR is defined such that any member not mentioned is assigned - a zero value. Initialize the rest of the instantiated elements. */ - generate_element_zero (lhs_elt, &seq); - gimple_seq_add_seq (&seq, init_seq); - if (!result) { /* If we failed to convert the entire initializer, then we must @@ -3423,6 +3424,13 @@ scalarize_init (struct sra_elt *lhs_elt, tree rhs, gimple_stmt_iterator *gsi) gimple_seq_add_seq (&seq0, seq); seq = seq0; } + else + { + /* CONSTRUCTOR is defined such that any member not mentioned is assigned + a zero value. Initialize the rest of the instantiated elements. */ + generate_element_zero (lhs_elt, &seq); + gimple_seq_add_seq (&seq, init_seq); + } if (lhs_elt->use_block_copy || !result) {