diff --git a/flang/lib/Parser/preprocessor.cpp b/flang/lib/Parser/preprocessor.cpp index a47f9c32ad27c..6e8e3aee19b09 100644 --- a/flang/lib/Parser/preprocessor.cpp +++ b/flang/lib/Parser/preprocessor.cpp @@ -684,7 +684,8 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) { dir.GetIntervalProvenanceRange(j, tokens - j), "#else: excess tokens at end of directive"_port_en_US); } - } else if (ifStack_.empty()) { + } + if (ifStack_.empty()) { prescanner.Say(dir.GetTokenProvenanceRange(dirOffset), "#else: not nested within #if, #ifdef, or #ifndef"_err_en_US); } else if (ifStack_.top() != CanDeadElseAppear::Yes) { diff --git a/flang/test/Preprocessing/pp048.F b/flang/test/Preprocessing/pp048.F new file mode 100644 index 0000000000000..121262c1840f9 --- /dev/null +++ b/flang/test/Preprocessing/pp048.F @@ -0,0 +1,11 @@ +! RUN: %flang -E %s 2>&1 | FileCheck %s +#ifndef XYZ42 + PARAMETER(A=2) +#else Z + PARAMETER(A=3) +#endif +! Ensure that "PARAMETER(A" is printed only once +! CHECK: PARAMETER(A +! CHECK-NOT: PARAMETER(A + end +