From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32505 invoked by alias); 1 Jul 2010 20:23:44 -0000 Received: (qmail 32430 invoked by uid 48); 1 Jul 2010 20:23:29 -0000 Date: Thu, 01 Jul 2010 20:23:00 -0000 Message-ID: <20100701202329.32429.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug fortran/44235] array temporary with high upper bound In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "dominiq at lps dot ens dot fr" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-07/txt/msg00127.txt.bz2 ------- Comment #2 from dominiq at lps dot ens dot fr 2010-07-01 20:23 ------- Lightly tested patch that does not create temporaries for the test in comment #1 --- ../_clean/gcc/fortran/dependency.c 2010-06-21 17:31:37.000000000 +0200 +++ gcc/fortran/dependency.c 2010-07-01 22:16:51.000000000 +0200 @@ -1037,8 +1037,9 @@ gfc_check_section_vs_section (gfc_ref *l /* Check for forward dependencies x:y vs. x+1:z. */ if (l_dir == 1 && r_dir == 1 - && l_start && r_start && gfc_dep_compare_expr (l_start, r_start) == -1 - && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == -1) + && l_start && r_start && (gfc_dep_compare_expr (l_start, r_start) == 0 + || gfc_dep_compare_expr (l_start, r_start) == -1) + /* && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == -1 */) { /* Check that the strides are the same. */ if (!l_stride && !r_stride) @@ -1050,8 +1051,9 @@ gfc_check_section_vs_section (gfc_ref *l /* Check for forward dependencies x:y:-1 vs. x-1:z:-1. */ if (l_dir == -1 && r_dir == -1 - && l_start && r_start && gfc_dep_compare_expr (l_start, r_start) == 1 - && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == 1) + && l_start && r_start && (gfc_dep_compare_expr (l_start, r_start) == 0 + || gfc_dep_compare_expr (l_start, r_start) == 1) + /* && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == 1 */) { /* Check that the strides are the same. */ if (!l_stride && !r_stride) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44235