1! { dg-do compile } 2 3subroutine f1 4 type dt 5 logical :: l = .false. 6 end type 7 type dt2 8 logical :: l = .false. 9 end type 10!$omp declare reduction (foo:integer(kind = 4) & ! { dg-error "Previous !.OMP DECLARE REDUCTION" } 11!$omp & :omp_out = omp_out + omp_in) 12!$omp declare reduction (foo:integer(kind = 4) : & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" } 13!$omp & omp_out = omp_out + omp_in) 14!$omp declare reduction (bar:integer, & 15!$omp & real:omp_out = omp_out + omp_in) 16!$omp declare reduction (baz:integer,real,integer & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" } 17!$omp & : omp_out = omp_out + omp_in) 18!$omp declare reduction (id1:dt,dt2:omp_out%l=omp_out%l & 19!$omp & .or.omp_in%l) 20!$omp declare reduction (id2:dt,dt:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" } 21!$omp & .or.omp_in%l) 22!$omp declare reduction (id3:dt2,dt:omp_out%l=omp_out%l & ! { dg-error "Previous !.OMP DECLARE REDUCTION" } 23!$omp & .or.omp_in%l) 24!$omp declare reduction (id3:dt2:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" } 25!$omp & .or.omp_in%l) 26end subroutine f1 27subroutine f2 28 interface 29 subroutine f2a (x, y, z) 30 character (len = *) :: x, y 31 logical :: z 32 end subroutine 33 end interface 34 interface f2b 35 subroutine f2b (x, y, z) 36 character (len = *, kind = 1) :: x, y 37 logical :: z 38 end subroutine 39 subroutine f2c (x, y, z) 40 character (kind = 4, len = *) :: x, y 41 logical :: z 42 end subroutine 43 end interface 44!$omp declare reduction (foo:character(len=*): & 45!$omp & f2a (omp_out, omp_in, .false.)) & 46!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 47!$omp declare reduction (bar:character(len=:): & 48!$omp & f2a (omp_out, omp_in, .false.)) & 49!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 50!$omp declare reduction (baz:character(len=4): & 51!$omp & f2a (omp_out, omp_in, .false.)) & 52!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 53!$omp declare reduction (baz:character(len=5): & 54!$omp & f2a (omp_out, omp_in, .false.)) & 55!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 56!$omp declare reduction (baz:character(len=6): & 57!$omp & f2a (omp_out, omp_in, .false.)) & 58!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 59!$omp declare reduction (id:character(len=*): & ! { dg-error "Previous !.OMP DECLARE REDUCTION" } 60!$omp & f2a (omp_out, omp_in, .false.)) & 61!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 62!$omp declare reduction (id: & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" } 63!$omp & character(len=:) : f2a (omp_out, omp_in, .false.)) & 64!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 65!$omp declare reduction & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" } 66!$omp (id2:character(len=*), character(len=:): & 67!$omp f2a (omp_out, omp_in, .false.)) & 68!$omp & initializer (f2a (omp_priv, omp_orig, .true.)) 69!$omp declare reduction (id3:character(len=*, kind = 1), character(kind=4, len=:): & 70!$omp f2b (omp_out, omp_in, .false.)) & 71!$omp & initializer (f2b (omp_priv, omp_orig, .true.)) 72!$omp declare reduction (id4:character(kind=4, len=4), character(kind =1, len=4): & 73!$omp f2b (omp_out, omp_in, .false.)) & 74!$omp & initializer (f2b (omp_priv, omp_orig, .true.)) 75end subroutine f2 76