| !RUN: %flang_fc1 -fdebug-dump-parse-tree-no-sema %s 2>&1 | FileCheck %s | |
| !RUN: not %flang_fc1 -pedantic -Werror -fdebug-dump-parse-tree-no-sema %s 2>&1 | FileCheck %s --check-prefix=ERROR | |
| ! CHECK: Program -> ProgramUnit -> SubroutineSubprogram | |
| ! CHECK: ProgramUnit -> FunctionSubprogram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| subroutine sub; end; function fn(); end; program p; end; | |
| ! CHECK: ProgramUnit -> SubroutineSubprogram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! CHECK: ProgramUnit -> Module | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| subroutine sub2; end; end program; end program; module m; end | |
| ! CHECK: ProgramUnit -> BlockData | |
| ! CHECK: ProgramUnit -> BlockData | |
| ! CHECK: ProgramUnit -> BlockData | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| block data bd; end; block data bd2; end; block data bd3; end | |
| ! CHECK: ProgramUnit -> Module | |
| ! CHECK: ProgramUnit -> Submodule | |
| ! CHECK: ProgramUnit -> Submodule | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| module sm; end; submodule (sm) sm2; end; submodule (sm:sm2) sm3; end | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| program p; end; use sm; print *, "Hello, World!"; end | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| program p; end; use sm; | |
| print *, "Hello, World!"; end | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| program p; end; use sm; print *, "Hello, World!"; | |
| end | |
| ! CHECK: ProgramUnit -> FunctionSubprogram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| function fn(); end | |
| 10 print *, "1"; 20 print *, "2"; | |
| end program; | |
| ! CHECK: ProgramUnit -> FunctionSubprogram | |
| ! CHECK: ProgramUnit -> MainProgram | |
| ! ERROR: portability: nonstandard usage: end of program unit not terminated by new line | |
| function fn(); end; 10 print *, "1"; 20 print *, "2"; end program; |