From: Peter Klausler Date: Tue, 9 May 2023 21:41:32 +0000 (-0700) Subject: [flang] Fix bogus errors about CONTIGUOUS attribute X-Git-Tag: upstream/17.0.6~8267 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=28cc9606c0b4a70f26b4a3eea32cf88c330b2d82;p=platform%2Fupstream%2Fllvm.git [flang] Fix bogus errors about CONTIGUOUS attribute Incorrect error messages were issuing for symbol table entries with the CONTIGUOUS attribute that didn't deserve them, like host association symbols. Put the CONTIGUOUS check into CheckObjectEntity(). Differential Revision: https://reviews.llvm.org/D150712 --- diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp index 3162af3..1b9a747 100644 --- a/flang/lib/Semantics/check-declarations.cpp +++ b/flang/lib/Semantics/check-declarations.cpp @@ -261,19 +261,6 @@ void CheckHelper::Check(const Symbol &symbol) { CheckExplicitSave(symbol); } const auto *object{symbol.detailsIf()}; - if (symbol.attrs().test(Attr::CONTIGUOUS)) { - if ((!object && !symbol.has()) || - !((IsPointer(symbol) && symbol.Rank() > 0) || IsAssumedShape(symbol) || - evaluate::IsAssumedRank(symbol))) { - if (symbol.owner().IsDerivedType()) { // C752 - messages_.Say( - "A CONTIGUOUS component must be an array with the POINTER attribute"_err_en_US); - } else { // C830 - messages_.Say( - "CONTIGUOUS entity must be an array pointer, assumed-shape, or assumed-rank"_err_en_US); - } - } - } CheckGlobalName(symbol); if (isDone) { return; // following checks do not apply @@ -848,6 +835,17 @@ void CheckHelper::CheckObjectEntity( "'%s' is a data object and may not be EXTERNAL"_err_en_US, symbol.name()); } + if (symbol.attrs().test(Attr::CONTIGUOUS)) { + if ((IsPointer(symbol) && symbol.Rank() > 0) || IsAssumedShape(symbol) || + evaluate::IsAssumedRank(symbol)) { + } else if (symbol.owner().IsDerivedType()) { // C752 + messages_.Say( + "A CONTIGUOUS component must be an array with the POINTER attribute"_err_en_US); + } else { // C830 + messages_.Say( + "CONTIGUOUS entity must be an array pointer, assumed-shape, or assumed-rank"_err_en_US); + } + } } void CheckHelper::CheckPointerInitialization(const Symbol &symbol) { diff --git a/flang/test/Semantics/resolve14.f90 b/flang/test/Semantics/resolve14.f90 index 78b80ae..aae2145 100644 --- a/flang/test/Semantics/resolve14.f90 +++ b/flang/test/Semantics/resolve14.f90 @@ -27,6 +27,12 @@ program p2 contiguous w !ERROR: 'z' is use-associated from module 'm2' and cannot be re-declared integer z + real, target :: a(10) + real, contiguous, pointer :: p(:) => a !ERROR: Reference to 'y' is ambiguous y = 1 + contains + subroutine inner + p(1) = 0. ! ok - check for regression on contiguous host assoc. + end subroutine end