diff --git a/flang/lib/Semantics/check-return.cpp b/flang/lib/Semantics/check-return.cpp --- a/flang/lib/Semantics/check-return.cpp +++ b/flang/lib/Semantics/check-return.cpp @@ -36,7 +36,8 @@ IsFunction(*subprogramScope->GetSymbol()))) { context_.Say( "RETURN with expression is only allowed in SUBROUTINE subprogram"_err_en_US); - } else if (context_.ShouldWarn(common::LanguageFeature::ProgramReturn)) { + } else if (subprogramScope->kind() == Scope::Kind::MainProgram && + context_.ShouldWarn(common::LanguageFeature::ProgramReturn)) { context_.Say("RETURN should not appear in a main program"_port_en_US); } } diff --git a/flang/test/Semantics/altreturn02.f90 b/flang/test/Semantics/altreturn02.f90 --- a/flang/test/Semantics/altreturn02.f90 +++ b/flang/test/Semantics/altreturn02.f90 @@ -1,4 +1,4 @@ -! RUN: %python %S/test_errors.py %s %flang_fc1 +! RUN: %flang_fc1 -fsyntax-only -pedantic %s 2>&1 | FileCheck %s --allow-empty ! Check subroutine with alt return SUBROUTINE TEST (N, *, *) @@ -6,3 +6,5 @@ IF ( N .EQ. 1 ) RETURN 1 RETURN 2 END +! CHECK-NOT: error: +! CHECK-NOT: portability: diff --git a/flang/test/Semantics/altreturn07.f90 b/flang/test/Semantics/altreturn07.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/altreturn07.f90 @@ -0,0 +1,6 @@ +! RUN: %flang_fc1 -fsyntax-only -pedantic %s 2>&1 | FileCheck %s +! Test extension: RETURN from main program + +return +! CHECK: portability: RETURN should not appear in a main program +end