diff --git a/flang/lib/Evaluate/tools.cpp b/flang/lib/Evaluate/tools.cpp --- a/flang/lib/Evaluate/tools.cpp +++ b/flang/lib/Evaluate/tools.cpp @@ -1004,12 +1004,8 @@ 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; diff --git a/flang/test/Semantics/save01.f90 b/flang/test/Semantics/save01.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/save01.f90 @@ -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 +