parser::MessageFormattedText{
"label '%u' is not in scope"_en_US, SayLabel(label)});
} else if (!doTarget.labeledStmtClassificationSet.test(
- TargetStatementEnum::Do) &&
- !doTarget.labeledStmtClassificationSet.test(
- TargetStatementEnum::CompatibleDo)) {
- errorHandler.Say(doTarget.parserCharBlock,
- parser::MessageFormattedText{
- "'%u' invalid DO terminal statement"_err_en_US, SayLabel(label)});
- } else if (!doTarget.labeledStmtClassificationSet.test(
TargetStatementEnum::Do)) {
- errorHandler.Say(doTarget.parserCharBlock,
- parser::MessageFormattedText{
- "'%u' invalid DO terminal statement"_en_US, SayLabel(label)});
+ if (!doTarget.labeledStmtClassificationSet.test(
+ TargetStatementEnum::CompatibleDo)) {
+ errorHandler.Say(doTarget.parserCharBlock,
+ parser::MessageFormattedText{
+ "'%u' DO statements must terminate with END DO or CONTINUE"_err_en_US,
+ SayLabel(label)});
+ } else {
+ errorHandler.Say(doTarget.parserCharBlock,
+ parser::MessageFormattedText{
+ "'%u' Obsolete construct not allowed. DO statements must terminate with END DO or CONTINUE"_en_US,
+ SayLabel(label)});
+ }
} else {
loopBodies.emplace_back(SkipLabel(position), doTarget.parserCharBlock);
}
--- /dev/null
+! Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
+!
+! Licensed under the Apache License, Version 2.0 (the "License");
+! you may not use this file except in compliance with the License.
+! You may obtain a copy of the License at
+!
+! http://www.apache.org/licenses/LICENSE-2.0
+!
+! Unless required by applicable law or agreed to in writing, software
+! distributed under the License is distributed on an "AS IS" BASIS,
+! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+! See the License for the specific language governing permissions and
+! limitations under the License.
+
+! Error test -- DO loop uses obsolete loop termination statement
+! See R1131 and C1131
+
+! RUN: ${F18} -funparse-with-symbols %s 2>&1 | ${FileCheck} %s
+! CHECK: Obsolete construct not allowed. DO statements must terminate with END DO or CONTINUE
+
+program endDo
+ do 10 i = 1, 5
+10 print *, "in loop"
+end program endDo