diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 1d2f1e9766879..8c991678047ec 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -843,7 +843,7 @@ void Prescanner::QuotedCharacterLiteral( if (*at_ == '\\') { if (escapesEnabled) { isEscaped = !isEscaped; - } else { + } else if (!preprocessingOnly_) { // The parser always processes escape sequences, so don't confuse it // when escapes are disabled. insert('\\'); diff --git a/flang/test/Parser/duplicate-backslashes.f90 b/flang/test/Parser/duplicate-backslashes.f90 new file mode 100644 index 0000000000000..896a5e864bc93 --- /dev/null +++ b/flang/test/Parser/duplicate-backslashes.f90 @@ -0,0 +1,23 @@ +! RUN: %flang -cpp -E %s -o %t.f90 +! RUN: %flang %t.f90 -o %t +! RUN: %t | FileCheck %s + +program main + implicit none + + ! Test single backslash + write(*, '(A)') "\" ! Expected single backslash in output + ! CHECK: \ + ! CHECK-NOT: \\ + + ! Test double backslash + write(*, '(A)') "\\" ! Expected double backslashes in output + ! CHECK: \\ + ! CHECK-NOT: \\\\ + + ! Test quadruple backslash + write(*, '(A)') "\\\\" ! Expected quadruple backslashes in output + ! CHECK: \\\\ + ! CHECK-NOT: \\\\\\\\ + +end program main