From patchwork Mon Mar 5 23:30:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Bosscher X-Patchwork-Id: 144802 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 0CE1DB6FA4 for ; Tue, 6 Mar 2012 10:31:31 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1331595093; h=Comment: DomainKey-Signature:Received:Received:Received:Received: Received-SPF:Received:MIME-Version:Received:Received:Date: Message-ID:Subject:From:To:Content-Type:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=O9WF8kEl3mJUdpJjvXTTSGSaUtM=; b=PWx4x0JZZ8xcZSz QDU7kyodw5yqHV+hUDNG/JahLTTRitCoaWvM7kvXcu0vXFjrss/Zt/IzAMDHXLw8 nC2lmt8GBFOF/kLr9rhyd/33VD5lUcNHkSuVTRxBv3ttJTLZ/CmP0uBInglps4ps 4QwsruqOo/qJBCXMEPTIY2AHfZhU= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received-SPF:Authentication-Results:Received:MIME-Version:Received:Received:Date:Message-ID:Subject:From:To:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=YFuLpPA785mIb92M6DusA6/SGSsAGVmqwT7C6t9hnWbLgUpV+IV5By3RF7olgn Sdyupx+qIRVvYCTNzTYovYLu3NgsHqjQN+sqOVjblRWVB9RUIfSMJrA7di6OY5YD FPM42nCBcgD7M6P4Aue+eOx/FzhZ1HTm4y4FkTYTEeFbI=; Received: (qmail 32603 invoked by alias); 5 Mar 2012 23:31:27 -0000 Received: (qmail 32585 invoked by uid 22791); 5 Mar 2012 23:31:24 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, TW_TM, TW_YY X-Spam-Check-By: sourceware.org Received: from mail-yx0-f175.google.com (HELO mail-yx0-f175.google.com) (209.85.213.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 05 Mar 2012 23:30:59 +0000 Received: by yenm3 with SMTP id m3so2109791yen.20 for ; Mon, 05 Mar 2012 15:30:59 -0800 (PST) Received-SPF: pass (google.com: domain of stevenb.gcc@gmail.com designates 10.236.176.163 as permitted sender) client-ip=10.236.176.163; Authentication-Results: mr.google.com; spf=pass (google.com: domain of stevenb.gcc@gmail.com designates 10.236.176.163 as permitted sender) smtp.mail=stevenb.gcc@gmail.com; dkim=pass header.i=stevenb.gcc@gmail.com Received: from mr.google.com ([10.236.176.163]) by 10.236.176.163 with SMTP id b23mr22690151yhm.122.1330990259082 (num_hops = 1); Mon, 05 Mar 2012 15:30:59 -0800 (PST) MIME-Version: 1.0 Received: by 10.236.176.163 with SMTP id b23mr17983958yhm.122.1330990259030; Mon, 05 Mar 2012 15:30:59 -0800 (PST) Received: by 10.101.126.19 with HTTP; Mon, 5 Mar 2012 15:30:58 -0800 (PST) Date: Tue, 6 Mar 2012 00:30:58 +0100 Message-ID: Subject: [patch] Clean up f95-lang.c a bit From: Steven Bosscher To: fortran@gcc.gnu.org, GCC Patches X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hello, This is a long-overdue cleanup of f95-lang.c. This file was once added as an almost one-to-one copy from one of the other languages and tweaked until it worked. But the comments in the file are misleading, out-dated, or wrong for other reasons, and there are remnants of the pre tree-ssa era that never worked or were never used for gfortran. Let's throw as much of that out as we can! (There will be a follow-up patch to clean up convert.c also :-) Bootstrapped&tested on x86_64-unknown-linux-gnu. OK? Ciao! Steven * f95-lang.c (yyerror, yylex): Remove. (clear_binding_stack): Remove, fold into its only user. (LANG_HOOKS_PRINT_IDENTIFIER): Do not re-define. (ridpointers): Remove. (gfc_eh_initialized_p): Make static. (gfc_truthvalue_conversion): Move to convert.c. (gfc_be_parse_file): Clear binding level stack when done. (gfc_print_identifier): Remove. (pushlevel): Remove ignored 'ignore' argument. Update all callers. (poplevel): Remove unused 'reverse' argument. Update all callers. (ggc_p): Remove. (gfc_builtin_function): Make static. Do not attempt to make RTL for builtin functions. * convert.c (gfc_truthvalue_conversion): Moved here from f95-lang.c, and made static. * trans.h (pushlevel, poplevel): Adjust prototypes. (gfc_truthvalue_conversion, gfc_builtin_function): Remove prototypes. * trans-openmp.c: Update calls to pushlevel and poplevel. * trans.c: Likewise. * trans-decl.c: Likewise. * f95-lang.c (yyerror, yylex): Remove. (clear_binding_stack): Remove, fold into its only user. (LANG_HOOKS_PRINT_IDENTIFIER): Do not re-define. (ridpointers): Remove. (gfc_eh_initialized_p): Make static. (gfc_truthvalue_conversion): Move to convert.c. (gfc_be_parse_file): Clear binding level stack when done. (gfc_print_identifier): Remove. (pushlevel): Remove ignored 'ignore' argument. Update all callers. (poplevel): Remove unused 'reverse' argument. Update all callers. (ggc_p): Remove. (gfc_builtin_function): Make static. Do not attempt to make RTL for builtin functions. * convert.c (gfc_truthvalue_conversion): Moved here from f95-lang.c, and made static. * trans.h (pushlevel, poplevel): Adjust prototypes. (gfc_truthvalue_conversion, gfc_builtin_function): Remove prototypes. * trans-openmp.c: Update calls to pushlevel and poplevel. * trans.c: Likewise. * trans-decl.c: Likewise. Index: f95-lang.c =================================================================== --- f95-lang.c (revision 184956) +++ f95-lang.c (working copy) @@ -60,7 +60,6 @@ lang_identifier { union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL"))) - lang_tree_node { union tree_node GTY((tag ("0"), desc ("tree_node_structure (&%h)"))) generic; @@ -77,25 +76,18 @@ language_function { struct binding_level *binding_level; }; -/* We don't have a lex/yacc lexer/parser, but toplev expects these to - exist anyway. */ -void yyerror (const char *str); -int yylex (void); - static void gfc_init_decl_processing (void); static void gfc_init_builtin_functions (void); +static bool global_bindings_p (void); /* Each front end provides its own. */ static bool gfc_init (void); static void gfc_finish (void); static void gfc_write_global_declarations (void); -static void gfc_print_identifier (FILE *, tree, int); -void do_function_end (void); -bool global_bindings_p (void); -static void clear_binding_stack (void); static void gfc_be_parse_file (void); static alias_set_type gfc_get_alias_set (tree); static void gfc_init_ts (void); +static tree gfc_builtin_function (tree); #undef LANG_HOOKS_NAME #undef LANG_HOOKS_INIT @@ -106,7 +98,6 @@ static void gfc_init_ts (void); #undef LANG_HOOKS_INIT_OPTIONS #undef LANG_HOOKS_HANDLE_OPTION #undef LANG_HOOKS_POST_OPTIONS -#undef LANG_HOOKS_PRINT_IDENTIFIER #undef LANG_HOOKS_PARSE_FILE #undef LANG_HOOKS_MARK_ADDRESSABLE #undef LANG_HOOKS_TYPE_FOR_MODE @@ -125,6 +116,7 @@ static void gfc_init_ts (void); #undef LANG_HOOKS_OMP_PRIVATE_OUTER_REF #undef LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES #undef LANG_HOOKS_BUILTIN_FUNCTION +#undef LANG_HOOKS_BUILTIN_FUNCTION #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO /* Define lang hooks. */ @@ -137,7 +129,6 @@ static void gfc_init_ts (void); #define LANG_HOOKS_INIT_OPTIONS gfc_init_options #define LANG_HOOKS_HANDLE_OPTION gfc_handle_option #define LANG_HOOKS_POST_OPTIONS gfc_post_options -#define LANG_HOOKS_PRINT_IDENTIFIER gfc_print_identifier #define LANG_HOOKS_PARSE_FILE gfc_be_parse_file #define LANG_HOOKS_TYPE_FOR_MODE gfc_type_for_mode #define LANG_HOOKS_TYPE_FOR_SIZE gfc_type_for_size @@ -166,64 +157,13 @@ struct lang_hooks lang_hooks = LANG_HOOK static GTY(()) struct binding_level *free_binding_level; -/* The elements of `ridpointers' are identifier nodes - for the reserved type names and storage classes. - It is indexed by a RID_... value. */ -tree *ridpointers = NULL; - /* True means we've initialized exception handling. */ -bool gfc_eh_initialized_p; +static bool gfc_eh_initialized_p; /* The current translation unit. */ static GTY(()) tree current_translation_unit; -/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, - or validate its data type for an `if' or `while' statement or ?..: exp. - - This preparation consists of taking the ordinary - representation of an expression expr and producing a valid tree - boolean expression describing whether expr is nonzero. We could - simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1), - but we optimize comparisons, &&, ||, and !. - - The resulting type should always be `boolean_type_node'. - This is much simpler than the corresponding C version because we have a - distinct boolean type. */ - -tree -gfc_truthvalue_conversion (tree expr) -{ - switch (TREE_CODE (TREE_TYPE (expr))) - { - case BOOLEAN_TYPE: - if (TREE_TYPE (expr) == boolean_type_node) - return expr; - else if (COMPARISON_CLASS_P (expr)) - { - TREE_TYPE (expr) = boolean_type_node; - return expr; - } - else if (TREE_CODE (expr) == NOP_EXPR) - return fold_build1_loc (input_location, NOP_EXPR, - boolean_type_node, TREE_OPERAND (expr, 0)); - else - return fold_build1_loc (input_location, NOP_EXPR, boolean_type_node, - expr); - - case INTEGER_TYPE: - if (TREE_CODE (expr) == INTEGER_CST) - return integer_zerop (expr) ? boolean_false_node : boolean_true_node; - else - return fold_build2_loc (input_location, NE_EXPR, boolean_type_node, - expr, build_int_cst (TREE_TYPE (expr), 0)); - - default: - internal_error ("Unexpected type in truthvalue_conversion"); - } -} - - static void gfc_create_decls (void) { @@ -255,7 +195,9 @@ gfc_be_parse_file (void) errorcount += errors; warningcount += warnings; - clear_binding_stack (); + /* Clear the binding level stack. */ + while (!global_bindings_p ()) + poplevel (0, 0); } @@ -322,16 +264,6 @@ gfc_write_global_declarations (void) write_global_declarations (); } - -static void -gfc_print_identifier (FILE * file ATTRIBUTE_UNUSED, - tree node ATTRIBUTE_UNUSED, - int indent ATTRIBUTE_UNUSED) -{ - return; -} - - /* These functions and variables deal with binding contours. We only need these functions for the list of PARM_DECLs, but we leave the functions more general; these are a simplified version of the @@ -351,9 +283,7 @@ struct GTY(()) binding_level { /* A chain of ..._DECL nodes for all variables, constants, functions, parameters and type declarations. These ..._DECL nodes are chained - through the DECL_CHAIN field. Note that these ..._DECL nodes are stored - in the reverse of the order supplied to be compatible with the - back-end. */ + through the DECL_CHAIN field. */ tree names; /* For each level (except the global one), a chain of BLOCK nodes for all the levels that were entered and exited one level down from this one. */ @@ -387,11 +317,10 @@ getdecls (void) return current_binding_level->names; } -/* Enter a new binding level. The input parameter is ignored, but has to be - specified for back-end compatibility. */ +/* Enter a new binding level. */ void -pushlevel (int ignore ATTRIBUTE_UNUSED) +pushlevel (void) { struct binding_level *newlevel = ggc_alloc_binding_level (); @@ -413,29 +342,19 @@ pushlevel (int ignore ATTRIBUTE_UNUSED) If FUNCTIONBODY is nonzero, this level is the body of a function, so create a block as if KEEP were set and also clear out all - label names. - - If REVERSE is nonzero, reverse the order of decls before putting - them into the BLOCK. */ + label names. */ tree -poplevel (int keep, int reverse, int functionbody) +poplevel (int keep, int functionbody) { /* Points to a BLOCK tree node. This is the BLOCK node constructed for the binding level that we are about to exit and which is returned by this routine. */ tree block_node = NULL_TREE; - tree decl_chain; + tree decl_chain = current_binding_level->names; tree subblock_chain = current_binding_level->blocks; tree subblock_node; - /* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL - nodes chained through the `names' field of current_binding_level are in - reverse order except for PARM_DECL node, which are explicitly stored in - the right order. */ - decl_chain = (reverse) ? nreverse (current_binding_level->names) - : current_binding_level->names; - /* If there were any declarations in the current binding level, or if this binding level is a function body, or if there are any nested blocks then create a BLOCK node to record them for the life of this function. */ @@ -513,10 +432,7 @@ pushdecl (tree decl) DECL_CONTEXT (decl) = current_function_decl; } - /* Put the declaration on the list. The list of declarations is in reverse - order. The list will be reversed later if necessary. This needs to be - this way for compatibility with the back-end. */ - + /* Put the declaration on the list. */ DECL_CHAIN (decl) = current_binding_level->names; current_binding_level->names = decl; @@ -548,16 +464,6 @@ pushdecl_top_level (tree x) return t; } - -/* Clear the binding stack. */ -static void -clear_binding_stack (void) -{ - while (!global_bindings_p ()) - poplevel (0, 0, 0); -} - - #ifndef CHAR_TYPE_SIZE #define CHAR_TYPE_SIZE BITS_PER_UNIT #endif @@ -582,7 +488,7 @@ gfc_init_decl_processing (void) /* Make the binding_level structure for global names. We move all variables that are in a COMMON block to this binding level. */ - pushlevel (0); + pushlevel (); global_binding_level = current_binding_level; /* Build common tree nodes. char_type_node is unsigned because we @@ -617,17 +523,11 @@ gfc_get_alias_set (tree t) return -1; } - -/* press the big red button - garbage (ggc) collection is on */ - -int ggc_p = 1; - /* Builtin function initialization. */ -tree +static tree gfc_builtin_function (tree decl) { - make_decl_rtl (decl); pushdecl (decl); return decl; } Index: convert.c =================================================================== --- convert.c (revision 184956) +++ convert.c (working copy) @@ -60,6 +60,50 @@ along with GCC; see the file COPYING3. /* Subroutines of `convert'. */ +/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, + or validate its data type for an `if' or `while' statement or ?..: exp. + + This preparation consists of taking the ordinary + representation of an expression expr and producing a valid tree + boolean expression describing whether expr is nonzero. We could + simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1), + but we optimize comparisons, &&, ||, and !. + + The resulting type should always be `boolean_type_node'. + This is much simpler than the corresponding C version because we have a + distinct boolean type. */ + +static tree +gfc_truthvalue_conversion (tree expr) +{ + switch (TREE_CODE (TREE_TYPE (expr))) + { + case BOOLEAN_TYPE: + if (TREE_TYPE (expr) == boolean_type_node) + return expr; + else if (COMPARISON_CLASS_P (expr)) + { + TREE_TYPE (expr) = boolean_type_node; + return expr; + } + else if (TREE_CODE (expr) == NOP_EXPR) + return fold_build1_loc (input_location, NOP_EXPR, + boolean_type_node, TREE_OPERAND (expr, 0)); + else + return fold_build1_loc (input_location, NOP_EXPR, boolean_type_node, + expr); + + case INTEGER_TYPE: + if (TREE_CODE (expr) == INTEGER_CST) + return integer_zerop (expr) ? boolean_false_node : boolean_true_node; + else + return fold_build2_loc (input_location, NE_EXPR, boolean_type_node, + expr, build_int_cst (TREE_TYPE (expr), 0)); + + default: + internal_error ("Unexpected type in truthvalue_conversion"); + } +} /* Create an expression whose value is that of EXPR, converted to type TYPE. The TREE_TYPE of the value Index: trans.h =================================================================== --- trans.h (revision 184956) +++ trans.h (working copy) @@ -427,8 +427,6 @@ int gfc_conv_procedure_call (gfc_se *, g void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent, bool); -/* gfc_trans_* shouldn't call push/poplevel, use gfc_push/pop_scope */ - /* Generate code for a scalar assignment. */ tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool, bool); @@ -632,11 +630,9 @@ void gfc_trans_deferred_vars (gfc_symbol /* In f95-lang.c. */ tree pushdecl (tree); tree pushdecl_top_level (tree); -void pushlevel (int); -tree poplevel (int, int, int); +void pushlevel (void); +tree poplevel (int, int); tree getdecls (void); -tree gfc_truthvalue_conversion (tree); -tree gfc_builtin_function (tree); /* In trans-types.c. */ struct array_descr_info; Index: trans-openmp.c =================================================================== --- trans-openmp.c (revision 184956) +++ trans-openmp.c (working copy) @@ -651,7 +651,7 @@ gfc_trans_omp_array_reduction (tree c, g gcc_assert (t == SUCCESS); /* Create the init statement list. */ - pushlevel (0); + pushlevel (); if (GFC_DESCRIPTOR_TYPE_P (type) && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) { @@ -691,13 +691,13 @@ gfc_trans_omp_array_reduction (tree c, g else stmt = gfc_trans_assignment (e1, e2, false, false); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); OMP_CLAUSE_REDUCTION_INIT (c) = stmt; /* Create the merge statement list. */ - pushlevel (0); + pushlevel (); if (GFC_DESCRIPTOR_TYPE_P (type) && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) { @@ -714,9 +714,9 @@ gfc_trans_omp_array_reduction (tree c, g else stmt = gfc_trans_assignment (e3, e4, false, true); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); OMP_CLAUSE_REDUCTION_MERGE (c) = stmt; /* And stick the placeholder VAR_DECL into the clause as well. */ @@ -1001,20 +1001,20 @@ gfc_trans_omp_code (gfc_code *code, bool { tree stmt; - pushlevel (0); + pushlevel (); stmt = gfc_trans_code (code); if (TREE_CODE (stmt) != BIND_EXPR) { if (!IS_EMPTY_STMT (stmt) || force_empty) { - tree block = poplevel (1, 0, 0); + tree block = poplevel (1, 0); stmt = build3_v (BIND_EXPR, NULL, stmt, block); } else - poplevel (0, 0, 0); + poplevel (0, 0); } else - poplevel (0, 0, 0); + poplevel (0, 0); return stmt; } @@ -1501,7 +1501,7 @@ gfc_trans_omp_do (gfc_code *code, stmtbl if (pblock != &block) { - pushlevel (0); + pushlevel (); gfc_start_block (&block); } @@ -1612,12 +1612,12 @@ gfc_trans_omp_parallel_do (gfc_code *cod if (!do_clauses.ordered && do_clauses.sched_kind != OMP_SCHED_STATIC) pblock = █ else - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_do (code, pblock, &do_clauses, omp_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1638,12 +1638,12 @@ gfc_trans_omp_parallel_sections (gfc_cod gfc_start_block (&block); omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, code->loc); - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_sections (code, §ion_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1664,12 +1664,12 @@ gfc_trans_omp_parallel_workshare (gfc_co gfc_start_block (&block); omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, code->loc); - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_workshare (code, &workshare_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1763,7 +1763,7 @@ gfc_trans_omp_workshare (gfc_code *code, code = code->block->next; - pushlevel (0); + pushlevel (); gfc_start_block (&block); pblock = █ @@ -1892,14 +1892,14 @@ gfc_trans_omp_workshare (gfc_code *code, { if (!IS_EMPTY_STMT (stmt)) { - tree bindblock = poplevel (1, 0, 0); + tree bindblock = poplevel (1, 0); stmt = build3_v (BIND_EXPR, NULL, stmt, bindblock); } else - poplevel (0, 0, 0); + poplevel (0, 0); } else - poplevel (0, 0, 0); + poplevel (0, 0); if (IS_EMPTY_STMT (stmt) && !clauses->nowait) stmt = gfc_trans_omp_barrier (); Index: trans.c =================================================================== --- trans.c (revision 184956) +++ trans.c (working copy) @@ -182,7 +182,7 @@ void gfc_start_block (stmtblock_t * block) { /* Start a new binding level. */ - pushlevel (0); + pushlevel (); block->has_scope = 1; /* The block is empty. */ @@ -215,7 +215,7 @@ gfc_merge_block_scope (stmtblock_t * blo /* Remember the decls in this scope. */ decl = getdecls (); - poplevel (0, 0, 0); + poplevel (0, 0); /* Add them to the parent scope. */ while (decl != NULL_TREE) @@ -250,11 +250,11 @@ gfc_finish_block (stmtblock_t * stmtbloc if (decl) { - block = poplevel (1, 0, 0); + block = poplevel (1, 0); expr = build3_v (BIND_EXPR, decl, expr, block); } else - poplevel (0, 0, 0); + poplevel (0, 0); } return expr; Index: trans-decl.c =================================================================== --- trans-decl.c (revision 184956) +++ trans-decl.c (working copy) @@ -2256,7 +2256,7 @@ trans_function_start (gfc_symbol * sym) init_function_start (fndecl); /* function.c requires a push at the start of the function. */ - pushlevel (0); + pushlevel (); } /* Create thunks for alternate entry points. */ @@ -2398,7 +2398,7 @@ build_entry_thunks (gfc_namespace * ns, /* Finish off this function and send it for code generation. */ DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body); tmp = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl; DECL_SAVED_TREE (thunk_fndecl) = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl), @@ -4400,7 +4400,7 @@ generate_coarray_init (gfc_namespace * n make_decl_rtl (fndecl); init_function_start (fndecl); - pushlevel (0); + pushlevel (); gfc_init_block (&caf_init_block); gfc_traverse_ns (ns, generate_coarray_sym_init); @@ -4408,7 +4408,7 @@ generate_coarray_init (gfc_namespace * n DECL_SAVED_TREE (fndecl) = gfc_finish_block (&caf_init_block); decl = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl) @@ -4971,7 +4971,7 @@ create_main_function (tree fndecl) rest_of_decl_compilation (ftn_main, 1, 0); make_decl_rtl (ftn_main); init_function_start (ftn_main); - pushlevel (0); + pushlevel (); gfc_init_block (&body); @@ -5139,7 +5139,7 @@ create_main_function (tree fndecl) decl = getdecls (); /* Finish off this function and send it for code generation. */ - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (ftn_main)) = ftn_main; DECL_SAVED_TREE (ftn_main) @@ -5428,7 +5428,7 @@ gfc_generate_function_code (gfc_namespac decl = getdecls (); /* Finish off this function and send it for code generation. */ - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl) @@ -5522,7 +5522,7 @@ gfc_generate_constructors (void) init_function_start (fndecl); - pushlevel (0); + pushlevel (); for (; gfc_static_ctors; gfc_static_ctors = TREE_CHAIN (gfc_static_ctors)) { @@ -5532,7 +5532,7 @@ gfc_generate_constructors (void) } decl = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl)