mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 11:38:04 +08:00
[flang] SAVE statement should not apply to nested scoping units
SAVE statement, according to 8.6.14, must apply to the same scoping unit, that excludes nested scoping units. For example, if the SAVE statement is found in a MODULE, the functions contained in that module should not inherit the SAVE attribute. I think that the code was doing this, failing the following source: ``` MODULE pippo SAVE CONTAINS PURE FUNCTION fft_stick_index( ) IMPLICIT NONE INTEGER :: fft_stick_index INTEGER :: mc !error: A pure subprogram may not have a variable with the SAVE attribute END FUNCTION END MODULE ``` Differential Revision: https://reviews.llvm.org/D88279
This commit is contained in:
committed by
Tim Keith
parent
98c5eebcf7
commit
c2921d148e
@@ -1004,12 +1004,8 @@ bool IsSaved(const Symbol &original) {
|
||||
return true;
|
||||
} else if (IsDummy(symbol) || IsFunctionResult(symbol)) {
|
||||
return false;
|
||||
} else {
|
||||
for (; !scope->IsGlobal(); scope = &scope->parent()) {
|
||||
if (scope->hasSAVE()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else if (scope->hasSAVE() ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
21
flang/test/Semantics/save01.f90
Normal file
21
flang/test/Semantics/save01.f90
Normal file
@@ -0,0 +1,21 @@
|
||||
! RUN: %S/test_errors.sh %s %t %f18
|
||||
MODULE test
|
||||
SAVE
|
||||
CONTAINS
|
||||
PURE FUNCTION pf( )
|
||||
IMPLICIT NONE
|
||||
INTEGER :: pf
|
||||
INTEGER :: mc
|
||||
!OK: SAVE statement is not inherited by the function
|
||||
END FUNCTION
|
||||
|
||||
PURE FUNCTION pf2( )
|
||||
IMPLICIT NONE
|
||||
SAVE
|
||||
INTEGER :: pf2
|
||||
!ERROR: A pure subprogram may not have a variable with the SAVE attribute
|
||||
INTEGER :: mc
|
||||
END FUNCTION
|
||||
|
||||
END MODULE
|
||||
|
||||
Reference in New Issue
Block a user