Skip to content

Commit

Permalink
[flang] Improve two coarray error messages (llvm#129597)
Browse files Browse the repository at this point in the history
Two messages that complain about local variables mention that they don't
have the SAVE attribute; in both cases, it would be okay if they were
ALLOCATABLE instead. Clarify the messages.
  • Loading branch information
klausler authored Mar 3, 2025
1 parent 79a25e1 commit f6e8366
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
5 changes: 3 additions & 2 deletions flang/lib/Semantics/check-declarations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -731,7 +731,8 @@ void CheckHelper::CheckObjectEntity(
symbol.name(), commonBlock->name());
} else if (isLocalVariable && !IsAllocatableOrPointer(symbol) &&
!IsSaved(symbol)) {
messages_.Say("Local coarray must have the SAVE attribute"_err_en_US);
messages_.Say(
"Local coarray must have the SAVE or ALLOCATABLE attribute"_err_en_US);
}
for (int j{0}; j < corank; ++j) {
if (auto lcbv{evaluate::ToInt64(evaluate::Fold(
Expand Down Expand Up @@ -980,7 +981,7 @@ void CheckHelper::CheckObjectEntity(
symbol.name(), badPotential.BuildResultDesignatorName());
} else if (isUnsavedLocal) { // F'2023 C826
SayWithDeclaration(*badPotential,
"Local variable '%s' without the SAVE attribute may not have a coarray potential subobject component '%s'"_err_en_US,
"Local variable '%s' without the SAVE or ALLOCATABLE attribute may not have a coarray potential subobject component '%s'"_err_en_US,
symbol.name(), badPotential.BuildResultDesignatorName());
} else {
DIE("caught unexpected bad coarray potential component");
Expand Down
6 changes: 3 additions & 3 deletions flang/test/Semantics/coarrays02.f90
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module m
program main
use iso_fortran_env
!ERROR: Coarray 'namedconst' may not be a named constant
!ERROR: Local coarray must have the SAVE attribute
!ERROR: Local coarray must have the SAVE or ALLOCATABLE attribute
integer, parameter :: namedConst = 123
codimension namedConst[*]
!ERROR: Coarray 'coarr1' may not be in COMMON block '//'
Expand All @@ -22,7 +22,7 @@ program main
function func1()
!ERROR: Function result may not be a coarray
integer :: func1[*]
!ERROR: Local coarray must have the SAVE attribute
!ERROR: Local coarray must have the SAVE or ALLOCATABLE attribute
integer :: local[*]
integer, save :: saved[*] ! ok
integer :: inited[*] = 1 ! ok
Expand All @@ -45,6 +45,6 @@ function func2()
type(t), pointer :: ptr
!ERROR: Coarray 'coarr' may not have a coarray potential component '%comp'
type(t), save :: coarr[*]
!ERROR: Local variable 'local' without the SAVE attribute may not have a coarray potential subobject component '%comp'
!ERROR: Local variable 'local' without the SAVE or ALLOCATABLE attribute may not have a coarray potential subobject component '%comp'
type(t) :: local
end
2 changes: 1 addition & 1 deletion flang/test/Semantics/init01.f90
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ subroutine objectpointers(j)
end type
type(t1), target, save :: o1
type(t1), save :: o2
!ERROR: Local variable 'o3' without the SAVE attribute may not have a coarray potential subobject component '%c2'
!ERROR: Local variable 'o3' without the SAVE or ALLOCATABLE attribute may not have a coarray potential subobject component '%c2'
type(t1), target :: o3
!ERROR: An initial data target may not be a reference to an ALLOCATABLE 'x1'
real, pointer :: p1 => x1
Expand Down

0 comments on commit f6e8366

Please sign in to comment.