1! Check for invalid (and some valid) cases of multiple OpenACC 'routine'
2! directives.
3
4      SUBROUTINE s_1
5!$ACC ROUTINE VECTOR WORKER ! { dg-error "Multiple loop axes specified for routine" }
6!$ACC ROUTINE(s_1)
7!$ACC ROUTINE GANG ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
8!$ACC ROUTINE(s_1) SEQ
9!$ACC ROUTINE
10!$ACC ROUTINE(s_1) WORKER ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
11!$ACC ROUTINE GANG VECTOR ! { dg-error "Multiple loop axes specified for routine" }
12      END SUBROUTINE s_1
13
14      SUBROUTINE s_2
15!$ACC ROUTINE(s_2) VECTOR WORKER ! { dg-error "Multiple loop axes specified for routine" }
16!$ACC ROUTINE
17!$ACC ROUTINE(s_2) GANG ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
18!$ACC ROUTINE SEQ
19!$ACC ROUTINE(s_2)
20!$ACC ROUTINE WORKER ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
21!$ACC ROUTINE(s_2) GANG VECTOR ! { dg-error "Multiple loop axes specified for routine" }
22      END SUBROUTINE s_2
23
24      SUBROUTINE v_1
25!$ACC ROUTINE VECTOR WORKER ! { dg-error "Multiple loop axes specified for routine" }
26!$ACC ROUTINE VECTOR
27!$ACC ROUTINE GANG ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
28!$ACC ROUTINE SEQ ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
29!$ACC ROUTINE ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
30!$ACC ROUTINE(v_1) VECTOR
31!$ACC ROUTINE WORKER ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
32!$ACC ROUTINE GANG VECTOR ! { dg-error "Multiple loop axes specified for routine" }
33      END SUBROUTINE v_1
34
35      SUBROUTINE v_2
36!$ACC ROUTINE(v_2) VECTOR
37!$ACC ROUTINE(v_2) VECTOR WORKER ! { dg-error "Multiple loop axes specified for routine" }
38!$ACC ROUTINE(v_2) ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
39!$ACC ROUTINE VECTOR
40!$ACC ROUTINE(v_2) GANG VECTOR ! { dg-error "Multiple loop axes specified for routine" }
41      END SUBROUTINE v_2
42
43      SUBROUTINE sub_1
44      IMPLICIT NONE
45      EXTERNAL :: g_1
46!$ACC ROUTINE (g_1) GANG
47!$ACC ROUTINE (g_1) GANG WORKER ! { dg-error "Multiple loop axes specified for routine" }
48!$ACC ROUTINE (g_1) VECTOR ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
49!$ACC ROUTINE (g_1) SEQ ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
50!$ACC ROUTINE (g_1) ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
51!$ACC ROUTINE (g_1) GANG
52!$ACC ROUTINE (g_1) ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
53
54      CALL s_1
55      CALL s_2
56      CALL v_1
57      CALL v_2
58      CALL g_1
59      CALL ABORT
60      END SUBROUTINE sub_1
61
62      MODULE m_w_1
63      IMPLICIT NONE
64      EXTERNAL :: w_1
65!$ACC ROUTINE (w_1) WORKER
66!$ACC ROUTINE (w_1) WORKER SEQ ! { dg-error "Multiple loop axes specified for routine" }
67!$ACC ROUTINE (w_1) ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
68!$ACC ROUTINE (w_1) WORKER
69!$ACC ROUTINE (w_1) SEQ ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
70!$ACC ROUTINE (w_1) ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
71!$ACC ROUTINE (w_1) VECTOR ! { dg-error "\\!\\\$ACC ROUTINE already applied" }
72
73      CONTAINS
74      SUBROUTINE sub_2
75      CALL s_1
76      CALL s_2
77      CALL v_1
78      CALL v_2
79      CALL w_1
80      CALL ABORT
81      END SUBROUTINE sub_2
82      END MODULE m_w_1
83