| ! RUN: not %flang_fc1 -fopenacc -fsyntax-only %s 2>&1 | FileCheck %s |
| |
| ! Check that !$acc routine() (empty parentheses) produces a specific error |
| ! pointing at the empty parens, and that the parser recovers so that |
| ! subsequent clauses (e.g. seq) are still parsed — no spurious |
| ! "expected end of OpenACC directive" or "expected declaration construct" |
| ! after recovery. |
| |
| subroutine sub1() |
| end subroutine |
| |
| module m |
| !$acc routine() seq |
| ! CHECK: error: empty parentheses in ROUTINE directive; omit parentheses for the unnamed form |
| |
| !$acc routine() |
| ! CHECK: error: empty parentheses in ROUTINE directive; omit parentheses for the unnamed form |
| |
| contains |
| subroutine inner() |
| !$acc routine() seq |
| ! CHECK: error: empty parentheses in ROUTINE directive; omit parentheses for the unnamed form |
| ! Verify the recovery did not leave "seq" or the () cases unconsumed. |
| ! The range checked by these CHECK-NOTs extends from the third "empty |
| ! parentheses" match above to the first CHECK below (the "expected '('" |
| ! from the malformed-list section), so they cover the entire empty-parens |
| ! section without bleeding into the intentional errors that follow. |
| ! CHECK-NOT: empty parentheses in ROUTINE directive |
| ! CHECK-NOT: expected declaration construct |
| ! CHECK-NOT: expected end of OpenACC directive |
| end subroutine |
| end module |
| |
| ! Malformed name-list cases: verify the "empty parentheses" recovery does not |
| ! fire for inputs it does not apply to. A name written without parentheses |
| ! and non-empty-but-malformed lists are left unconsumed by the ROUTINE parser |
| ! and produce errors from the surrounding specification-part context instead. |
| ! Each CHECK-NOT below is ranged between the surrounding CHECK lines so it |
| ! tests only the interval between consecutive malformed-case errors. |
| module m2 |
| contains |
| subroutine sub_a() |
| end subroutine |
| subroutine sub_b() |
| !$acc routine sub_a seq |
| ! CHECK: error: expected '(' |
| ! CHECK-NOT: empty parentheses in ROUTINE directive |
| !$acc routine(sub_a,) seq |
| ! CHECK: error: expected declaration construct |
| ! CHECK-NOT: empty parentheses in ROUTINE directive |
| !$acc routine(sub_a sub_b) seq |
| ! CHECK: error: expected declaration construct |
| ! CHECK-NOT: empty parentheses in ROUTINE directive |
| end subroutine |
| end module |