Hi all, attached patch fixes an illegal use of gfc_current_locus during the check()-phase of several coarray functions. Instead gfc_current_intrinsic_where needs to be used. This error does not crash gfortran reliably. But valgrind reports an access to uninitialized memory. I therefore do not know how to test this in the testsuite.
Regtests ok on x86_64-pc-linux-gnu / F41. Ok for mainline? Regards, Andre -- Andre Vehreschild * Email: vehre ad gmx dot de
From 56a5099b9ed307b1c3cd1bfeeeebe2058ef74f43 Mon Sep 17 00:00:00 2001 From: Andre Vehreschild <ve...@gcc.gnu.org> Date: Tue, 22 Apr 2025 10:11:52 +0200 Subject: [PATCH] Fortran: Use correct location in check of coarray functions [PR119200] Use gfc_current_intrinsic_where during check(), because gfc_current_locus is not set to correct location or at all. PR fortran/119200 gcc/fortran/ChangeLog: * check.cc (gfc_check_lcobound): Use locus from intrinsic_where. (gfc_check_image_index): Same. (gfc_check_num_images): Same. (gfc_check_team_number): Same. (gfc_check_this_image): Same. (gfc_check_ucobound): Same. --- gcc/fortran/check.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 356e0d7f678..91945bea1e3 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -3835,7 +3835,8 @@ gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6572,7 +6573,8 @@ gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub, if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6622,7 +6624,8 @@ gfc_check_num_images (gfc_expr *team_or_team_number) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6651,7 +6654,8 @@ gfc_check_team_number (gfc_expr *team) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6668,7 +6672,8 @@ gfc_check_this_image (gfc_actual_arglist *args) if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6967,7 +6972,8 @@ gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } -- 2.49.0