From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id A58F13858D32 for ; Mon, 24 Apr 2023 07:52:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A58F13858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id CE2E71FD7B; Mon, 24 Apr 2023 07:52:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1682322732; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/LhFt9lZnSoLumY/nWBX9wcbtAeMNwsOGwa9b5zyjWg=; b=WhRxwNXTs8NY7wvq/RmBaN+D3eSV+it1kkO/VvjYiZXU0XL5+FA1F0ccrqflV5uBimGXCf cSQaegQIKmsh7hklfENVGVGAcyB6/6Z+ijfZMa43a0OkSGIpfMmhxns5PUUtQL2ok8oFT7 N79tSoSgWKn5hF0l9+kigoWwHBp6ioY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1682322732; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/LhFt9lZnSoLumY/nWBX9wcbtAeMNwsOGwa9b5zyjWg=; b=l5j8TbdLWXWQm8lp0LOm2/y2iigtuPG5QOOcRz8jTnGm8RW/GEEaAZQn4sDaTYgXMdkTrw 5c0ptz1N+UgZyYBw== Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id B0E6B2C141; Mon, 24 Apr 2023 07:52:12 +0000 (UTC) Date: Mon, 24 Apr 2023 07:52:12 +0000 (UTC) From: Richard Biener To: Jan Hubicka cc: michal@jires.eu, gcc-patches@gcc.gnu.org Subject: Re: Stabilize temporary variable names In-Reply-To: Message-ID: References: User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Fri, 21 Apr 2023, Jan Hubicka wrote: > Hi, > Michal Jires implemented quite well working prototype of cache for WPA which makes > it to re-use partitions from from earlier build when package is rebulit with smaller > changes. It should be useful to improve edit/compile/debug cycles when one is > forced to debug with LTO enabled but hopefully also avoid duplicated work i.e. > during bootstrap where libbackend is linked into multiple frontends. > > To make this work well, it is necessary to avoid local decisions from > one function to leak into others. This patch fixes a problem he noticed > in create_tmp_var_name. It has one global id appended after each name. > So calling it with create_tmp_var_name ("pretmp") yields to somehting > like "pretmp.1". This global counters makes one function body to depend > on number of temporaries produced by another function body. In his > testcase a local change to large function in switch conversion pass > resulted in recompilation of most of partitions since an important > inline (unrelated to the patched function) had ID in it that has changed. > > I think that independently on the incremental WPA project it is a good > idea to stabilize temporary names, in similar manner as we stabilized > symbol names of clones couple years back. > > I think we want > 1) for local variables use local IDs > (this is used by gimplifier to produce temporaries, openmp lowering, thunk > generation and by some passes to make names instead of unnamed SSA names) > 2) for global variables either appends function symbol name when the variable > exists to lower some construct in its body. > For example swtich conversion can use CSWITCH.foo. > instead of CSWITCH. > 3) for truly global variables have per-name IDs. > > This patch implement only 1 but adds extra parameter separating locals from > globals. I think true vs. false in the API makes it not easy to read the code. Maybe we can pass struct function or a function decl as first argument and use NULL to mean 3) and non-NULL to mean 1). To distinguish 2) we'd need something additional. I note that a lot of the calls pass the name to build_decl directly, I wonder if they could use create_tmp_var{,_name,_raw} or a split out part just doing the build_decl and create_tmp_var_name part with an appropriate name instead? Richard. > Bootstrapped/regtested x86_64-linux, OK? > > gcc/fortran/ChangeLog: > > * trans-array.cc (gfc_build_constant_array_constructor): Update call of > create_tmp_var_name. > (gfc_trans_auto_array_allocation): Likewise. > * trans-decl.cc (gfc_add_assign_aux_vars): Likewise. > (create_function_arglist): Likewise. > (generate_coarray_init): Likewise. > (create_main_function): Likewise. > > gcc/ChangeLog: > > * function.h (struct function): Add tmp_var_id_num. > * gimple-expr.cc (create_tmp_var_name): Add parameter whether name is > local or global; for local use function local ids. > (create_tmp_var_raw): Udate. > * gimple-expr.h (create_tmp_var_name): Udate. > * gimplify.cc (internal_get_tmp_var): Udate. > (gimplify_init_constructor): Udate. > (gimplify_modify_expr): Udate. > (gimplify_function_tree): Udate. > * ipa-param-manipulation.cc (ipa_param_body_adjustments::common_initialization): Udate. > * lto-streamer-in.cc (input_struct_function_base): Udate. > * lto-streamer-out.cc (hash_tree): Udate. > * omp-low.cc (scan_omp_parallel): Udate. > (scan_omp_task): Udate. > (scan_omp_single): Udate. > (scan_omp_target): Udate. > (scan_omp_teams): Udate. > * omp-oacc-neuter-broadcast.cc (oacc_do_neutering): Udate. > * symtab-thunks.cc (expand_thunk): Udate. > * tree-nested.cc (get_chain_decl): Udate. > * tree-parloops.cc (separate_decls_in_region): Udate. > * tree-switch-conversion.cc (switch_conversion::build_one_array): Udate. > > > gcc/testsuite/ChangeLog: > > * gfortran.dg/char_cast_1.f90: Update template. > * gfortran.dg/vector_subscript_4.f90: Update template. > > diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc > index e1725808033..f3de515f6c9 100644 > --- a/gcc/fortran/trans-array.cc > +++ b/gcc/fortran/trans-array.cc > @@ -2623,7 +2623,7 @@ gfc_build_constant_array_constructor (gfc_expr * expr, tree type) > TREE_CONSTANT (init) = 1; > TREE_STATIC (init) = 1; > > - tmp = build_decl (input_location, VAR_DECL, create_tmp_var_name ("A"), > + tmp = build_decl (input_location, VAR_DECL, create_tmp_var_name ("A", true), > tmptype); > DECL_ARTIFICIAL (tmp) = 1; > DECL_IGNORED_P (tmp) = 1; > @@ -6699,7 +6699,7 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, > { > gcc_assert (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE); > space = build_decl (gfc_get_location (&sym->declared_at), > - VAR_DECL, create_tmp_var_name ("A"), > + VAR_DECL, create_tmp_var_name ("A", false), > TREE_TYPE (TREE_TYPE (decl))); > gfc_trans_vla_type_sizes (sym, &init); > } > diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc > index 299764b08b2..4c59e4dc0f4 100644 > --- a/gcc/fortran/trans-decl.cc > +++ b/gcc/fortran/trans-decl.cc > @@ -1417,10 +1417,10 @@ gfc_add_assign_aux_vars (gfc_symbol * sym) > gfc_allocate_lang_decl (decl); > GFC_DECL_ASSIGN (decl) = 1; > length = build_decl (input_location, > - VAR_DECL, create_tmp_var_name (sym->name), > + VAR_DECL, create_tmp_var_name (sym->name, false), > gfc_charlen_type_node); > addr = build_decl (input_location, > - VAR_DECL, create_tmp_var_name (sym->name), > + VAR_DECL, create_tmp_var_name (sym->name, false), > pvoid_type_node); > gfc_finish_var_decl (length, sym); > gfc_finish_var_decl (addr, sym); > @@ -2835,7 +2835,7 @@ create_function_arglist (gfc_symbol * sym) > : TREE_TYPE (f->sym->backend_decl); > > token = build_decl (input_location, PARM_DECL, > - create_tmp_var_name ("caf_token"), > + create_tmp_var_name ("caf_token", false), > build_qualified_type (pvoid_type_node, > TYPE_QUAL_RESTRICT)); > if ((f->sym->ts.type != BT_CLASS > @@ -2864,7 +2864,7 @@ create_function_arglist (gfc_symbol * sym) > gfc_finish_decl (token); > > offset = build_decl (input_location, PARM_DECL, > - create_tmp_var_name ("caf_offset"), > + create_tmp_var_name ("caf_offset", false), > gfc_array_index_type); > > if ((f->sym->ts.type != BT_CLASS > @@ -5713,7 +5713,7 @@ generate_coarray_init (gfc_namespace * ns __attribute((unused))) > > tmp = build_function_type_list (void_type_node, NULL_TREE); > fndecl = build_decl (input_location, FUNCTION_DECL, > - create_tmp_var_name ("_caf_init"), tmp); > + create_tmp_var_name ("_caf_init", true), tmp); > > DECL_STATIC_CONSTRUCTOR (fndecl) = 1; > SET_DECL_INIT_PRIORITY (fndecl, DEFAULT_INIT_PRIORITY); > @@ -6395,7 +6395,7 @@ create_main_function (tree fndecl) > > /* Create a static variable to hold the jump table. */ > var = build_decl (input_location, VAR_DECL, > - create_tmp_var_name ("options"), array_type); > + create_tmp_var_name ("options", true), array_type); > DECL_ARTIFICIAL (var) = 1; > DECL_IGNORED_P (var) = 1; > TREE_CONSTANT (var) = 1; > diff --git a/gcc/function.h b/gcc/function.h > index d4ce8a7c6c6..dbcfe0bc97e 100644 > --- a/gcc/function.h > +++ b/gcc/function.h > @@ -338,6 +338,9 @@ struct GTY(()) function { > flags for the actions that they have taken. */ > unsigned int pending_TODOs; > > + /* ID used by create_tmp_var_name. */ > + unsigned int tmp_var_id_num; > + > /* Non-null if the function does something that would prevent it from > being copied; this applies to both versioning and inlining. Set to > a string describing the reason for failure. */ > diff --git a/gcc/gimple-expr.cc b/gcc/gimple-expr.cc > index 83dc340a35d..ddbb2b48bef 100644 > --- a/gcc/gimple-expr.cc > +++ b/gcc/gimple-expr.cc > @@ -415,7 +415,7 @@ remove_suffix (char *name, int len) > static GTY(()) unsigned int tmp_var_id_num; > > tree > -create_tmp_var_name (const char *prefix) > +create_tmp_var_name (const char *prefix, bool global) > { > char *tmp_name; > > @@ -429,7 +429,9 @@ create_tmp_var_name (const char *prefix) > prefix = preftmp; > } > > - ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix ? prefix : "T", tmp_var_id_num++); > + /* During self-tests we create tmp variables cfun being NULL. */ > + ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix ? prefix : "T", > + !global && cfun ? cfun->tmp_var_id_num++ : tmp_var_id_num++); > return get_identifier (tmp_name); > } > > @@ -442,7 +444,7 @@ create_tmp_var_raw (tree type, const char *prefix) > tree tmp_var; > > tmp_var = build_decl (input_location, > - VAR_DECL, prefix ? create_tmp_var_name (prefix) : NULL, > + VAR_DECL, prefix ? create_tmp_var_name (prefix, false) : NULL, > type); > > /* The variable was declared by the compiler. */ > diff --git a/gcc/gimple-expr.h b/gcc/gimple-expr.h > index e89f7e20fc8..0ac1fc2cfe1 100644 > --- a/gcc/gimple-expr.h > +++ b/gcc/gimple-expr.h > @@ -28,7 +28,7 @@ extern gimple_seq gimple_body (tree); > extern bool gimple_has_body_p (tree); > extern const char *gimple_decl_printable_name (tree, int); > extern tree copy_var_decl (tree, tree, tree); > -extern tree create_tmp_var_name (const char *); > +extern tree create_tmp_var_name (const char *, bool global); > extern tree create_tmp_var_raw (tree, const char * = NULL); > extern tree create_tmp_var (tree, const char * = NULL); > extern tree create_tmp_reg (tree, const char * = NULL); > diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc > index 5a8340504d0..241fdc922de 100644 > --- a/gcc/gimplify.cc > +++ b/gcc/gimplify.cc > @@ -637,7 +637,7 @@ internal_get_tmp_var (tree val, gimple_seq *pre_p, gimple_seq *post_p, > { > const char *name = get_name (val); > if (name) > - SET_SSA_NAME_VAR_OR_IDENTIFIER (t, create_tmp_var_name (name)); > + SET_SSA_NAME_VAR_OR_IDENTIFIER (t, create_tmp_var_name (name, false)); > } > } > else > @@ -5250,7 +5250,7 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, > DECL_INITIAL (object) = ctor; > TREE_STATIC (object) = 1; > if (!DECL_NAME (object)) > - DECL_NAME (object) = create_tmp_var_name ("C"); > + DECL_NAME (object) = create_tmp_var_name ("C", true); > walk_tree (&DECL_INITIAL (object), force_labels_r, NULL, NULL); > > /* ??? C++ doesn't automatically append a . to the > @@ -6250,7 +6250,7 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, > { > if (!DECL_NAME (*from_p) && DECL_NAME (*to_p)) > DECL_NAME (*from_p) > - = create_tmp_var_name (IDENTIFIER_POINTER (DECL_NAME (*to_p))); > + = create_tmp_var_name (IDENTIFIER_POINTER (DECL_NAME (*to_p)), false); > DECL_HAS_DEBUG_EXPR_P (*from_p) = 1; > SET_DECL_DEBUG_EXPR (*from_p, *to_p); > } > @@ -17881,7 +17881,7 @@ gimplify_function_tree (tree fndecl) > tree first_var > = build_decl (DECL_SOURCE_LOCATION (current_function_decl), > VAR_DECL, > - create_tmp_var_name ("C"), > + create_tmp_var_name ("C", true), > boolean_type_node); > DECL_ARTIFICIAL (first_var) = 1; > DECL_IGNORED_P (first_var) = 1; > diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc > index 42488ee09c3..314a7a5aa20 100644 > --- a/gcc/ipa-param-manipulation.cc > +++ b/gcc/ipa-param-manipulation.cc > @@ -1378,7 +1378,7 @@ ipa_param_body_adjustments::common_initialization (tree old_fndecl, > new_parm = build_decl (UNKNOWN_LOCATION, PARM_DECL, NULL_TREE, > new_type); > const char *prefix = ipa_param_prefixes[apm->param_prefix_index]; > - DECL_NAME (new_parm) = create_tmp_var_name (prefix); > + DECL_NAME (new_parm) = create_tmp_var_name (prefix, false); > DECL_ARTIFICIAL (new_parm) = 1; > DECL_ARG_TYPE (new_parm) = new_type; > DECL_CONTEXT (new_parm) = m_fndecl; > diff --git a/gcc/lto-streamer-in.cc b/gcc/lto-streamer-in.cc > index 03cb41cfa16..5a0f156eb27 100644 > --- a/gcc/lto-streamer-in.cc > +++ b/gcc/lto-streamer-in.cc > @@ -1300,6 +1300,8 @@ input_struct_function_base (struct function *fn, class data_in *data_in, > /* Input the current IL state of the function. */ > fn->curr_properties = streamer_read_uhwi (ib); > > + fn->tmp_var_id_num = streamer_read_uhwi (ib); > + > /* Read all the attributes for FN. */ > bp = streamer_read_bitpack (ib); > fn->is_thunk = bp_unpack_value (&bp, 1); > diff --git a/gcc/lto-streamer-out.cc b/gcc/lto-streamer-out.cc > index 0bca530313c..27f9edd3fcd 100644 > --- a/gcc/lto-streamer-out.cc > +++ b/gcc/lto-streamer-out.cc > @@ -2260,6 +2256,8 @@ output_struct_function_base (struct output_block *ob, struct function *fn) > /* Output current IL state of the function. */ > streamer_write_uhwi (ob, fn->curr_properties); > > + streamer_write_uhwi (ob, fn->tmp_var_id_num); > + > /* Write all the attributes for FN. */ > bp = bitpack_create (ob->main_stream); > bp_pack_value (&bp, fn->is_thunk, 1); > diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc > index dddf5b59d8f..5ae35260a28 100644 > --- a/gcc/omp-low.cc > +++ b/gcc/omp-low.cc > @@ -2324,7 +2324,7 @@ scan_omp_parallel (gimple_stmt_iterator *gsi, omp_context *outer_ctx) > ctx->is_nested = true; > ctx->field_map = splay_tree_new (splay_tree_compare_pointers, 0, 0); > ctx->record_type = lang_hooks.types.make_type (RECORD_TYPE); > - name = create_tmp_var_name (".omp_data_s"); > + name = create_tmp_var_name (".omp_data_s", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->record_type); > DECL_ARTIFICIAL (name) = 1; > @@ -2377,7 +2377,7 @@ scan_omp_task (gimple_stmt_iterator *gsi, omp_context *outer_ctx) > ctx->is_nested = true; > ctx->field_map = splay_tree_new (splay_tree_compare_pointers, 0, 0); > ctx->record_type = lang_hooks.types.make_type (RECORD_TYPE); > - name = create_tmp_var_name (".omp_data_s"); > + name = create_tmp_var_name (".omp_data_s", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->record_type); > DECL_ARTIFICIAL (name) = 1; > @@ -2391,7 +2391,7 @@ scan_omp_task (gimple_stmt_iterator *gsi, omp_context *outer_ctx) > > if (ctx->srecord_type) > { > - name = create_tmp_var_name (".omp_data_a"); > + name = create_tmp_var_name (".omp_data_a", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->srecord_type); > DECL_ARTIFICIAL (name) = 1; > @@ -3067,7 +3067,7 @@ scan_omp_single (gomp_single *stmt, omp_context *outer_ctx) > ctx = new_omp_context (stmt, outer_ctx); > ctx->field_map = splay_tree_new (splay_tree_compare_pointers, 0, 0); > ctx->record_type = lang_hooks.types.make_type (RECORD_TYPE); > - name = create_tmp_var_name (".omp_copy_s"); > + name = create_tmp_var_name (".omp_copy_s", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->record_type); > TYPE_NAME (ctx->record_type) = name; > @@ -3094,7 +3094,7 @@ scan_omp_target (gomp_target *stmt, omp_context *outer_ctx) > ctx = new_omp_context (stmt, outer_ctx); > ctx->field_map = splay_tree_new (splay_tree_compare_pointers, 0, 0); > ctx->record_type = lang_hooks.types.make_type (RECORD_TYPE); > - name = create_tmp_var_name (".omp_data_t"); > + name = create_tmp_var_name (".omp_data_t", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->record_type); > DECL_ARTIFICIAL (name) = 1; > @@ -3156,7 +3156,7 @@ scan_omp_teams (gomp_teams *stmt, omp_context *outer_ctx) > gcc_assert (taskreg_nesting_level == 1); > ctx->field_map = splay_tree_new (splay_tree_compare_pointers, 0, 0); > ctx->record_type = lang_hooks.types.make_type (RECORD_TYPE); > - tree name = create_tmp_var_name (".omp_data_s"); > + tree name = create_tmp_var_name (".omp_data_s", false); > name = build_decl (gimple_location (stmt), > TYPE_DECL, name, ctx->record_type); > DECL_ARTIFICIAL (name) = 1; > diff --git a/gcc/omp-oacc-neuter-broadcast.cc b/gcc/omp-oacc-neuter-broadcast.cc > index 6328253018e..9b94502671d 100644 > --- a/gcc/omp-oacc-neuter-broadcast.cc > +++ b/gcc/omp-oacc-neuter-broadcast.cc > @@ -1647,7 +1647,7 @@ oacc_do_neutering (unsigned HOST_WIDE_INT bounds_lo, > if (ws_prop) > { > tree record_type = lang_hooks.types.make_type (RECORD_TYPE); > - tree name = create_tmp_var_name (".oacc_ws_data_s"); > + tree name = create_tmp_var_name (".oacc_ws_data_s", false); > name = build_decl (UNKNOWN_LOCATION, TYPE_DECL, name, record_type); > DECL_ARTIFICIAL (name) = 1; > DECL_NAMELESS (name) = 1; > diff --git a/gcc/symtab-thunks.cc b/gcc/symtab-thunks.cc > index 4c04235c41b..d79edb4c5d6 100644 > --- a/gcc/symtab-thunks.cc > +++ b/gcc/symtab-thunks.cc > @@ -534,7 +534,7 @@ expand_thunk (cgraph_node *node, bool output_asm_thunks, > tree p = DECL_STRUCT_FUNCTION (alias)->static_chain_decl; > tree type = TREE_TYPE (p); > tree decl = build_decl (DECL_SOURCE_LOCATION (thunk_fndecl), > - PARM_DECL, create_tmp_var_name ("CHAIN"), > + PARM_DECL, create_tmp_var_name ("CHAIN", false), > type); > DECL_ARTIFICIAL (decl) = 1; > DECL_IGNORED_P (decl) = 1; > diff --git a/gcc/testsuite/gfortran.dg/char_cast_1.f90 b/gcc/testsuite/gfortran.dg/char_cast_1.f90 > index 02e695d2d7b..b5e0aeb6ecb 100644 > --- a/gcc/testsuite/gfortran.dg/char_cast_1.f90 > +++ b/gcc/testsuite/gfortran.dg/char_cast_1.f90 > @@ -27,4 +27,4 @@ > end > ! The sign that all is well is that [S.6][1] appears twice. > ! Platform dependent variations are [S$6][1], [__S_6][1], [S___6][1] > -! { dg-final { scan-tree-dump-times "6\\\]\\\[1\\\]" 2 "original" } } > +! { dg-final { scan-tree-dump-times "2\\\]\\\[1\\\]" 2 "original" } } > diff --git a/gcc/testsuite/gfortran.dg/vector_subscript_4.f90 b/gcc/testsuite/gfortran.dg/vector_subscript_4.f90 > index d726d424ab7..382745fbb2c 100644 > --- a/gcc/testsuite/gfortran.dg/vector_subscript_4.f90 > +++ b/gcc/testsuite/gfortran.dg/vector_subscript_4.f90 > @@ -9,4 +9,4 @@ > integer :: i(-1:1) = 1, j(3) = 1, k(3) > k = j((/1,1,1/)+i) > end > -! { dg-final { scan-tree-dump-times "A\.2\\\[3\\\]" 1 "original" } } > +! { dg-final { scan-tree-dump-times "A\.1\\\[3\\\]" 1 "original" } } > diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc > index 1418e1f7f56..f6ec2997e61 100644 > --- a/gcc/tree-nested.cc > +++ b/gcc/tree-nested.cc > @@ -473,7 +473,7 @@ get_chain_decl (struct nesting_info *info) > close to the truth, since the initial value does come from > the caller. */ > decl = build_decl (DECL_SOURCE_LOCATION (info->context), > - PARM_DECL, create_tmp_var_name ("CHAIN"), type); > + PARM_DECL, create_tmp_var_name ("CHAIN", false), type); > DECL_ARTIFICIAL (decl) = 1; > DECL_IGNORED_P (decl) = 1; > TREE_USED (decl) = 1; > diff --git a/gcc/tree-parloops.cc b/gcc/tree-parloops.cc > index dfb75c369d6..8d0ea9fb941 100644 > --- a/gcc/tree-parloops.cc > +++ b/gcc/tree-parloops.cc > @@ -2109,7 +2109,7 @@ separate_decls_in_region (edge entry, edge exit, > /* Create the type for the structure to store the ssa names to. */ > type = lang_hooks.types.make_type (RECORD_TYPE); > type_name = build_decl (UNKNOWN_LOCATION, > - TYPE_DECL, create_tmp_var_name (".paral_data"), > + TYPE_DECL, create_tmp_var_name (".paral_data", false), > type); > TYPE_NAME (type) = type_name; > > diff --git a/gcc/tree-switch-conversion.cc b/gcc/tree-switch-conversion.cc > index c08c22039c9..caa1c43bc14 100644 > --- a/gcc/tree-switch-conversion.cc > +++ b/gcc/tree-switch-conversion.cc > @@ -671,7 +671,7 @@ switch_conversion::build_one_array (int num, tree arr_index_type, > TREE_STATIC (decl) = 1; > DECL_INITIAL (decl) = ctor; > > - DECL_NAME (decl) = create_tmp_var_name ("CSWTCH"); > + DECL_NAME (decl) = create_tmp_var_name ("CSWTCH", true); > DECL_ARTIFICIAL (decl) = 1; > DECL_IGNORED_P (decl) = 1; > TREE_CONSTANT (decl) = 1; > -- Richard Biener SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg)