From aeb12e9f01c55b7799090e9fc92e177332a61a91 Mon Sep 17 00:00:00 2001 From: EbinJose2002 Date: Wed, 11 Jun 2025 18:00:42 +0530 Subject: [PATCH 1/2] Solved an issue with preprocessor comment handling Issue was with pointer passing --- flang/lib/Parser/prescan.cpp | 2 +- flang/test/temp_test/m.mod | 16 ++++++++++++++++ flang/test/temp_test/test.f90 | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 flang/test/temp_test/m.mod create mode 100644 flang/test/temp_test/test.f90 diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 9aef0c9981e3c..2232b94b8da11 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -564,7 +564,7 @@ bool Prescanner::MustSkipToEndOfLine() const { return true; // skip over ignored columns in right margin (73:80) } else if (*at_ == '!' && !inCharLiteral_ && (!inFixedForm_ || tabInCurrentLine_ || column_ != 6)) { - return !IsCompilerDirectiveSentinel(at_); + return !IsCompilerDirectiveSentinel(at_ + 1); } else { return false; } diff --git a/flang/test/temp_test/m.mod b/flang/test/temp_test/m.mod new file mode 100644 index 0000000000000..da352f0465237 --- /dev/null +++ b/flang/test/temp_test/m.mod @@ -0,0 +1,16 @@ +!mod$ v1 sum:17d756d2fb56521c +module m +contains +subroutine func1(foo) +real(2)::foo +!dir$ ignore_tkr(d) foo +end +subroutine func3(foo) +real(2)::foo +!dir$ ignore_tkr(d) foo +end +subroutine func4(foo) +real(2)::foo +!dir$ ignore_tkr(d) foo +end +end diff --git a/flang/test/temp_test/test.f90 b/flang/test/temp_test/test.f90 new file mode 100644 index 0000000000000..5f0bdc457da74 --- /dev/null +++ b/flang/test/temp_test/test.f90 @@ -0,0 +1,19 @@ +module m + contains + +! Directive inside macro on same line; works +#define MACRO(X) subroutine func1(X); real(2) :: X; !dir$ ignore_tkr(d) X; end subroutine func1; +MACRO(foo) + +! Same subroutine, but after preprocessor expansion (-e -fno-reformat); syntax error + ! subroutine func2(foo); real(2) :: foo; !dir$ ignore_tkr(d) foo; end subroutine func2; + +! Parses with line wrap before !dir$ + subroutine func3(foo); real(2) :: foo; + !dir$ ignore_tkr(d) foo; end subroutine func3; + +! Parses with line wrap after !dir$, but swallows the directive + subroutine func4(foo); real(2) :: foo; !dir$ ignore_tkr(d) foo; + end subroutine func4; + +end module \ No newline at end of file From 82125ccf36259b9c072a533230798073531ad8d2 Mon Sep 17 00:00:00 2001 From: EbinJose2002 Date: Thu, 12 Jun 2025 12:26:56 +0530 Subject: [PATCH 2/2] - Created test for inlined compiler directives --- flang/test/Parser/inline-directives.f90 | 29 +++++++++++++++++++++++++ flang/test/temp_test/m.mod | 16 -------------- flang/test/temp_test/test.f90 | 19 ---------------- 3 files changed, 29 insertions(+), 35 deletions(-) create mode 100644 flang/test/Parser/inline-directives.f90 delete mode 100644 flang/test/temp_test/m.mod delete mode 100644 flang/test/temp_test/test.f90 diff --git a/flang/test/Parser/inline-directives.f90 b/flang/test/Parser/inline-directives.f90 new file mode 100644 index 0000000000000..24d4f95759a6e --- /dev/null +++ b/flang/test/Parser/inline-directives.f90 @@ -0,0 +1,29 @@ +! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s + +! Test that checks whether compiler directives can be inlined without mistaking it as comment. + +module m +contains +#define MACRO(X) subroutine func1(X); real(2) :: X; !dir$ ignore_tkr(d) X; end subroutine func1; +MACRO(foo) + +!CHECK: SUBROUTINE func1 (foo) +!CHECK: !DIR$ IGNORE_TKR (d) foo +!CHECK: END SUBROUTINE func1 + + subroutine func2(foo) + real(2) :: foo; !dir$ ignore_tkr(d) foo; + end subroutine func2 + +!CHECK: SUBROUTINE func2 (foo) +!CHECK: !DIR$ IGNORE_TKR (d) foo +!CHECK: END SUBROUTINE func2 + + subroutine func3(foo) + real(2) :: foo; !dir$ ignore_tkr(d) foo; end subroutine func3; + +!CHECK: SUBROUTINE func3 (foo) +!CHECK: !DIR$ IGNORE_TKR (d) foo +!CHECK: END SUBROUTINE func3 + +end module diff --git a/flang/test/temp_test/m.mod b/flang/test/temp_test/m.mod deleted file mode 100644 index da352f0465237..0000000000000 --- a/flang/test/temp_test/m.mod +++ /dev/null @@ -1,16 +0,0 @@ -!mod$ v1 sum:17d756d2fb56521c -module m -contains -subroutine func1(foo) -real(2)::foo -!dir$ ignore_tkr(d) foo -end -subroutine func3(foo) -real(2)::foo -!dir$ ignore_tkr(d) foo -end -subroutine func4(foo) -real(2)::foo -!dir$ ignore_tkr(d) foo -end -end diff --git a/flang/test/temp_test/test.f90 b/flang/test/temp_test/test.f90 deleted file mode 100644 index 5f0bdc457da74..0000000000000 --- a/flang/test/temp_test/test.f90 +++ /dev/null @@ -1,19 +0,0 @@ -module m - contains - -! Directive inside macro on same line; works -#define MACRO(X) subroutine func1(X); real(2) :: X; !dir$ ignore_tkr(d) X; end subroutine func1; -MACRO(foo) - -! Same subroutine, but after preprocessor expansion (-e -fno-reformat); syntax error - ! subroutine func2(foo); real(2) :: foo; !dir$ ignore_tkr(d) foo; end subroutine func2; - -! Parses with line wrap before !dir$ - subroutine func3(foo); real(2) :: foo; - !dir$ ignore_tkr(d) foo; end subroutine func3; - -! Parses with line wrap after !dir$, but swallows the directive - subroutine func4(foo); real(2) :: foo; !dir$ ignore_tkr(d) foo; - end subroutine func4; - -end module \ No newline at end of file