Paul, I'll delete the code in the comment.
I'm doing one more update and build just to make sure everything still works as intended. I'm not sure what paperwork I need. Shall I try to do "svn commit" and see what happens? Louis ---- On Thu, 01 Oct 2015 02:10:34 -0700 Paul Richard Thomas wrote ---- >Dear Louis, > >I have just a minor nit to pick; otherwise your patch is OK for trunk. > >I do not think that quoting the code in the first comment is >necessary. If anybody is interested, they can walz off to >expand_expr_real_1 themselves. The textual part of your comment is >perfectly clear. > >Many thanks for the patch. > >Paul > >PS Do you now have all the paperwork to commit the patch yourself? > >On 29 September 2015 at 09:36, Louis Krupp <louis.kr...@zoho.com> wrote: >> Paul, >> >> The patch is attached. I last compiled and tested the code at 21:15 UTC on >> 28 September. >> >> Would you like me to resend the test cases? >> >> Louis >> >> ---- On Mon, 28 Sep 2015 00:55:10 -0700 Paul Richard Thomas wrote ---- >>>Hi Louis, >>> >>>Could you please send the patch as an attachment - in your message, >>>much of the lhs whitespace information has been lost. Fundamentally, >>>the patch looks OK. Since they pertain to the same PRs, I would >>>consider combining the first and third testcases, either by throwing >>>the procedures into one module of by renaming the modules; eg. gfbug1 >>>and gfbug2. >>> >>>Cheers >>> >>>Paul >>> >>>On 25 September 2015 at 18:49, Louis Krupp <louis.kr...@zoho.com> wrote: >>>> Index: gcc/fortran/ChangeLog >>>> =================================================================== >>>> --- gcc/fortran/ChangeLog (revision 227895) >>>> +++ gcc/fortran/ChangeLog (working copy) >>>> @@ -1,3 +1,15 @@ >>>> +2015-09-18 Louis Krupp <louis.kr...@zoho.com> >>>> + >>>> + PR fortran/62242 >>>> + PR fortran/52332 >>>> + * trans-array.c >>>> + (store_backend_decl): Create new gfc_charlen instance if requested >>>> + (get_array_ctor_all_strlen): Call store_backend_decl requesting >>>> + new gfc_charlen >>>> + (trans_array_constructor): Call store_backend_decl requesting >>>> + new gfc_charlen if get_array_ctor_strlen was called >>>> + (gfc_add_loop_ss_code): Don't try to convert non-constant length >>>> + >>>> 2015-09-17 Paul Thomas <pa...@gcc.gnu.org> >>>> >>>> PR fortran/52846 >>>> Index: gcc/testsuite/ChangeLog >>>> =================================================================== >>>> --- gcc/testsuite/ChangeLog (revision 227895) >>>> +++ gcc/testsuite/ChangeLog (working copy) >>>> @@ -1,3 +1,10 @@ >>>> +2015-09-18 Louis Krupp <louis.kr...@zoho.com> >>>> + >>>> + PR fortran/62242 fortran/52332 >>>> + * gfortran.dg/string_array_constructor_1.f90: New. >>>> + * gfortran.dg/string_array_constructor_2.f90: New. >>>> + * gfortran.dg/string_array_constructor_3.f90: New. >>>> + >>>> 2015-09-17 Bernd Edlinger <bernd.edlin...@hotmail.de> >>>> >>>> PR sanitizer/64078 >>>> Index: gcc/fortran/trans-array.c >>>> =================================================================== >>>> --- gcc/fortran/trans-array.c (revision 227895) >>>> +++ gcc/fortran/trans-array.c (working copy) >>>> @@ -1799,6 +1799,39 @@ gfc_trans_array_constructor_value (stmtblock_t * p >>>> } >>>> >>>> >>>> +/* The array constructor code can create a string length with an operand >>>> + in the form of a temporary variable. This variable will retain its >>>> + context (current_function_decl). If we store this length tree in a >>>> + gfc_charlen structure which is shared by a variable in another >>>> + context, the resulting gfc_charlen structure with a variable in a >>>> + different context, we could trip the assertion in expand_expr_real_1 >>>> + when it sees that a variable has been created in one context and >>>> + referenced in another: >>>> + >>>> + if (exp) >>>> + context = decl_function_context (exp); >>>> + gcc_assert (!exp >>>> + || SCOPE_FILE_SCOPE_P (context) >>>> + || context == current_function_decl >>>> + || TREE_STATIC (exp) >>>> + || DECL_EXTERNAL (exp) >>>> + // ??? C++ creates functions that are not TREE_STATIC. >>>> + || TREE_CODE (exp) == FUNCTION_DECL); >>>> + >>>> + If this might be the case, we create a new gfc_charlen structure and >>>> + link it into the current namespace. */ >>>> + >>>> +static void >>>> +store_backend_decl (gfc_charlen **clp, tree len, bool force_new_cl) >>>> +{ >>>> + if (force_new_cl) >>>> + { >>>> + gfc_charlen *new_cl = gfc_new_charlen (gfc_current_ns, *clp); >>>> + *clp = new_cl; >>>> + } >>>> + (*clp)->backend_decl = len; >>>> +} >>>> + >>>> /* A catch-all to obtain the string length for anything that is not >>>> a substring of non-constant length, a constant, array or variable. */ >>>> >>>> @@ -1836,7 +1869,7 @@ get_array_ctor_all_strlen (stmtblock_t *block, gfc >>>> gfc_add_block_to_block (block, &se.pre); >>>> gfc_add_block_to_block (block, &se.post); >>>> >>>> - e->ts.u.cl->backend_decl = *len; >>>> + store_backend_decl (&e->ts.u.cl, *len, true); >>>> } >>>> } >>>> >>>> @@ -2226,6 +2259,7 @@ trans_array_constructor (gfc_ss * ss, locus * wher >>>> if (expr->ts.type == BT_CHARACTER) >>>> { >>>> bool const_string; >>>> + bool force_new_cl = false; >>>> >>>> /* get_array_ctor_strlen walks the elements of the constructor, if a >>>> typespec was given, we already know the string length and want the one >>>> @@ -2244,14 +2278,17 @@ trans_array_constructor (gfc_ss * ss, locus * wher >>>> gfc_add_block_to_block (&outer_loop->post, &length_se.post); >>>> } >>>> else >>>> - const_string = get_array_ctor_strlen (&outer_loop->pre, c, >>>> - &ss_info->string_length); >>>> + { >>>> + const_string = get_array_ctor_strlen (&outer_loop->pre, c, >>>> + &ss_info->string_length); >>>> + force_new_cl = true; >>>> + } >>>> >>>> /* Complex character array constructors should have been taken care of >>>> and not end up here. */ >>>> gcc_assert (ss_info->string_length); >>>> >>>> - expr->ts.u.cl->backend_decl = ss_info->string_length; >>>> + store_backend_decl (&expr->ts.u.cl, ss_info->string_length, >>>> force_new_cl); >>>> >>>> type = gfc_get_character_type_len (expr->ts.kind, ss_info->string_length); >>>> if (const_string) >>>> @@ -2589,7 +2626,8 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss >>>> if (expr->ts.type == BT_CHARACTER >>>> && ss_info->string_length == NULL >>>> && expr->ts.u.cl >>>> - && expr->ts.u.cl->length) >>>> + && expr->ts.u.cl->length >>>> + && expr->ts.u.cl->length->expr_type == EXPR_CONSTANT) >>>> { >>>> gfc_init_se (&se, NULL); >>>> gfc_conv_expr_type (&se, expr->ts.u.cl->length, >>> >>> >>> >>>-- >>>Outside of a dog, a book is a man's best friend. Inside of a dog it's >>>too dark to read. >>> >>>Groucho Marx >>> > > > >-- >Outside of a dog, a book is a man's best friend. Inside of a dog it's >too dark to read. > >Groucho Marx > >