Index: gcc/testsuite/ChangeLog.fortran-caf
===================================================================
--- gcc/testsuite/ChangeLog.fortran-caf	(Revision 210258)
+++ gcc/testsuite/ChangeLog.fortran-caf	(Arbeitskopie)
@@ -1,3 +1,8 @@
+2014-05-11  Tobias Burnus  <burnus@net-b.de>
+
+	* gfortran.dg/coarray/send_array.f90: Add scalar-scalar
+	test.
+
 2014-04-07  Tobias Burnus  <burnus@net-b.de>
 
 	* gfortran.dg/coarray/send_array.f90: Really fix support
Index: gcc/testsuite/gfortran.dg/coarray/send_array.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray/send_array.f90	(Revision 210258)
+++ gcc/testsuite/gfortran.dg/coarray/send_array.f90	(Arbeitskopie)
@@ -1,7 +1,7 @@
 ! { dg-do run }
 !
 ! This program does a correctness check for
-! ARRAY = SCALAR and ARRAY = ARRAY
+! ARRAY[idx] = SCALAR, ARRAY[idx] = ARRAY and SCALAR[idx] = SCALAR
 !
 program main
   implicit none
@@ -18,92 +18,125 @@ program main
   call two()
   call three()
 contains
-subroutine one(lb1, lb2)
-  integer, value :: lb1, lb2
+  subroutine one(lb1, lb2)
+    integer, value :: lb1, lb2
 
-  integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
-  integer, allocatable :: caf(:,:)[:]
-  integer, allocatable :: a(:,:), b(:,:)
+    integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
+    integer, allocatable :: caf(:,:)[:]
+    integer, allocatable :: a(:,:), b(:,:)
 
-  allocate(caf(lb1:n+lb1-1, lb2:m+lb2-1)[*], &
-             a(lb1:n+lb1-1, lb2:m+lb2-1), &
-             b(lb1:n+lb1-1, lb2:m+lb2-1))
+    allocate(caf(lb1:n+lb1-1, lb2:m+lb2-1)[*], &
+         a(lb1:n+lb1-1, lb2:m+lb2-1), &
+         b(lb1:n+lb1-1, lb2:m+lb2-1))
 
-  b = reshape([(i*33, i = 1, size(b))], shape(b))
+    b = reshape([(i*33, i = 1, size(b))], shape(b))
 
-  ! Whole array: ARRAY = SCALAR
-  caf = -42
-  a = -42
-  a(:,:) = b(lb1, lb2)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(lb1, lb2)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = SCALAR
+    caf = -42
+    a = -42
+    a(:,:) = b(lb1, lb2)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(lb1, lb2)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Whole array: ARRAY = ARRAY
-  caf = -42
-  a = -42
-  a(:,:) = b(:, :)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(:, :)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = ARRAY
+    caf = -42
+    a = -42
+    a(:,:) = b(:, :)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(:, :)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Array sections with different ranges and pos/neg strides
-  do i_sgn1 = -1, 1, 2
-    do i_sgn2 = -1, 1, 2
-      do i=lb1, n+lb1-1
-        do i_e=lb1, n+lb1-1
-          do i_s=1, n
-            do j=lb2, m+lb2-1
-              do j_e=lb2, m+lb2-1
-                do j_s=1, m
-                  ! ARRAY = SCALAR
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(lb1, lb2)
-                  end if
-                  sync all
+    ! Scalar assignment
+    caf = -42
+    a = -42
+    do j = lb2, m+lb2-1
+      do i = n+lb1-1, 1, -2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    do j = lb2, m+lb2-1
+      do i = 1, n+lb1-1, 2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    sync all
+    if (this_image() == 1) then
+      do j = lb2, m+lb2-1
+        do i = n+lb1-1, 1, -2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+      do j = lb2, m+lb2-1
+        do i = 1, n+lb1-1, 2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-                  ! ARRAY = ARRAY
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
-                      = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  end if
-                  sync all
+    ! Array sections with different ranges and pos/neg strides
+    do i_sgn1 = -1, 1, 2
+      do i_sgn2 = -1, 1, 2
+        do i=lb1, n+lb1-1
+          do i_e=lb1, n+lb1-1
+            do i_s=1, n
+              do j=lb2, m+lb2-1
+                do j_e=lb2, m+lb2-1
+                  do j_s=1, m
+                    ! ARRAY = SCALAR
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(lb1, lb2)
+                    end if
+                    sync all
 
-                  if (this_image() == num_images()) then
-                    if (any (a /= caf)) then
-                      print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
-                                                   lb2,":",m+lb2-1
-                      print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
-                                              ", ", j,":",j_e,":",j_s*i_sgn2
-                      print *, i
-                      print *, a
-                      print *, caf
-                      print *, a-caf
-                      call abort()
-                    endif
-                  end if
+                    ! ARRAY = ARRAY
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
+                         = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    end if
+                    sync all
+
+                    if (this_image() == num_images()) then
+                      if (any (a /= caf)) then
+                        print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
+                             lb2,":",m+lb2-1
+                        print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
+                             ", ", j,":",j_e,":",j_s*i_sgn2
+                        print *, i
+                        print *, a
+                        print *, caf
+                        print *, a-caf
+                        call abort()
+                      endif
+                    end if
+                  end do
                 end do
               end do
             end do
@@ -111,92 +144,124 @@ contains
         end do
       end do
     end do
-  end do
-end subroutine one
+  end subroutine one
 
-subroutine two()
-  integer, parameter :: lb1 = -5, lb2 = 1
+  subroutine two()
+    integer, parameter :: lb1 = -5, lb2 = 1
 
-  integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
-  integer, save :: caf(lb1:n+lb1-1, lb2:m+lb2-1)[*]
-  integer, save :: a(lb1:n+lb1-1, lb2:m+lb2-1)
-  integer, save :: b(lb1:n+lb1-1, lb2:m+lb2-1)
+    integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
+    integer, save :: caf(lb1:n+lb1-1, lb2:m+lb2-1)[*]
+    integer, save :: a(lb1:n+lb1-1, lb2:m+lb2-1)
+    integer, save :: b(lb1:n+lb1-1, lb2:m+lb2-1)
 
-  b = reshape([(i*33, i = 1, size(b))], shape(b))
+    b = reshape([(i*33, i = 1, size(b))], shape(b))
 
-  ! Whole array: ARRAY = SCALAR
-  caf = -42
-  a = -42
-  a(:,:) = b(lb1, lb2)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(lb1, lb2)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = SCALAR
+    caf = -42
+    a = -42
+    a(:,:) = b(lb1, lb2)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(lb1, lb2)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Whole array: ARRAY = ARRAY
-  caf = -42
-  a = -42
-  a(:,:) = b(:, :)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(:, :)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = ARRAY
+    caf = -42
+    a = -42
+    a(:,:) = b(:, :)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(:, :)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Array sections with different ranges and pos/neg strides
-  do i_sgn1 = -1, 1, 2
-    do i_sgn2 = -1, 1, 2
-      do i=lb1, n+lb1-1
-        do i_e=lb1, n+lb1-1
-          do i_s=1, n
-            do j=lb2, m+lb2-1
-              do j_e=lb2, m+lb2-1
-                do j_s=1, m
-                  ! ARRAY = SCALAR
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(lb1, lb2)
-                  end if
-                  sync all
+    ! Scalar assignment
+    caf = -42
+    a = -42
+    do j = lb2, m+lb2-1
+      do i = n+lb1-1, 1, -2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    do j = lb2, m+lb2-1
+      do i = 1, n+lb1-1, 2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    sync all
+    if (this_image() == 1) then
+      do j = lb2, m+lb2-1
+        do i = n+lb1-1, 1, -2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+      do j = lb2, m+lb2-1
+        do i = 1, n+lb1-1, 2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-                  ! ARRAY = ARRAY
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
-                      = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  end if
-                  sync all
+    ! Array sections with different ranges and pos/neg strides
+    do i_sgn1 = -1, 1, 2
+      do i_sgn2 = -1, 1, 2
+        do i=lb1, n+lb1-1
+          do i_e=lb1, n+lb1-1
+            do i_s=1, n
+              do j=lb2, m+lb2-1
+                do j_e=lb2, m+lb2-1
+                  do j_s=1, m
+                    ! ARRAY = SCALAR
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(lb1, lb2)
+                    end if
+                    sync all
 
-                  if (this_image() == num_images()) then
-                    if (any (a /= caf)) then
-                      print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
-                                                   lb2,":",m+lb2-1
-                      print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
-                                              ", ", j,":",j_e,":",j_s*i_sgn2
-                      print *, i
-                      print *, a
-                      print *, caf
-                      print *, a-caf
-                      call abort()
-                    endif
-                  end if
+                    ! ARRAY = ARRAY
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
+                         = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    end if
+                    sync all
+
+                    if (this_image() == num_images()) then
+                      if (any (a /= caf)) then
+                        print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
+                             lb2,":",m+lb2-1
+                        print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
+                             ", ", j,":",j_e,":",j_s*i_sgn2
+                        print *, i
+                        print *, a
+                        print *, caf
+                        print *, a-caf
+                        call abort()
+                      endif
+                    end if
+                  end do
                 end do
               end do
             end do
@@ -204,92 +269,124 @@ contains
         end do
       end do
     end do
-  end do
-end subroutine two
+  end subroutine two
 
-subroutine three()
-  integer, parameter :: lb1 = 0, lb2 = 0
+  subroutine three()
+    integer, parameter :: lb1 = 0, lb2 = 0
 
-  integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
-  integer, save :: caf(lb1:n+lb1-1, lb2:m+lb2-1)[*]
-  integer, save :: a(lb1:n+lb1-1, lb2:m+lb2-1)
-  integer, save :: b(lb1:n+lb1-1, lb2:m+lb2-1)
+    integer :: i_sgn1, i_sgn2, i, i_e, i_s, j, j_e, j_s
+    integer, save :: caf(lb1:n+lb1-1, lb2:m+lb2-1)[*]
+    integer, save :: a(lb1:n+lb1-1, lb2:m+lb2-1)
+    integer, save :: b(lb1:n+lb1-1, lb2:m+lb2-1)
 
-  b = reshape([(i*33, i = 1, size(b))], shape(b))
+    b = reshape([(i*33, i = 1, size(b))], shape(b))
 
-  ! Whole array: ARRAY = SCALAR
-  caf = -42
-  a = -42
-  a(:,:) = b(lb1, lb2)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(lb1, lb2)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = SCALAR
+    caf = -42
+    a = -42
+    a(:,:) = b(lb1, lb2)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(lb1, lb2)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Whole array: ARRAY = ARRAY
-  caf = -42
-  a = -42
-  a(:,:) = b(:, :)
-  sync all
-  if (this_image() == 1) then
-    caf(:,:)[num_images()] = b(:, :)
-  end if
-  sync all
-  if (this_image() == num_images()) then
-    if (any (a /= caf)) &
-      call abort()
-  end if
+    ! Whole array: ARRAY = ARRAY
+    caf = -42
+    a = -42
+    a(:,:) = b(:, :)
+    sync all
+    if (this_image() == 1) then
+      caf(:,:)[num_images()] = b(:, :)
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-  ! Array sections with different ranges and pos/neg strides
-  do i_sgn1 = -1, 1, 2
-    do i_sgn2 = -1, 1, 2
-      do i=lb1, n+lb1-1
-        do i_e=lb1, n+lb1-1
-          do i_s=1, n
-            do j=lb2, m+lb2-1
-              do j_e=lb2, m+lb2-1
-                do j_s=1, m
-                  ! ARRAY = SCALAR
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(lb1, lb2)
-                  end if
-                  sync all
+    ! Scalar assignment
+    caf = -42
+    a = -42
+    do j = lb2, m+lb2-1
+      do i = n+lb1-1, 1, -2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    do j = lb2, m+lb2-1
+      do i = 1, n+lb1-1, 2
+        a(i,j) = b(i,j)
+      end do
+    end do
+    sync all
+    if (this_image() == 1) then
+      do j = lb2, m+lb2-1
+        do i = n+lb1-1, 1, -2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+      do j = lb2, m+lb2-1
+        do i = 1, n+lb1-1, 2
+          caf(i,j)[num_images()] = b(i, j)
+        end do
+      end do
+    end if
+    sync all
+    if (this_image() == num_images()) then
+      if (any (a /= caf)) &
+           call abort()
+    end if
 
-                  ! ARRAY = ARRAY
-                  caf = -42
-                  a = -42
-                  a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
-                      = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  sync all
-                  if (this_image() == 1) then
-                    caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
-                        = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
-                  end if
-                  sync all
+    ! Array sections with different ranges and pos/neg strides
+    do i_sgn1 = -1, 1, 2
+      do i_sgn2 = -1, 1, 2
+        do i=lb1, n+lb1-1
+          do i_e=lb1, n+lb1-1
+            do i_s=1, n
+              do j=lb2, m+lb2-1
+                do j_e=lb2, m+lb2-1
+                  do j_s=1, m
+                    ! ARRAY = SCALAR
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) = b(lb1, lb2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(lb1, lb2)
+                    end if
+                    sync all
 
-                  if (this_image() == num_images()) then
-                    if (any (a /= caf)) then
-                      print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
-                                                   lb2,":",m+lb2-1
-                      print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
-                                              ", ", j,":",j_e,":",j_s*i_sgn2
-                      print *, i
-                      print *, a
-                      print *, caf
-                      print *, a-caf
-                      call abort()
-                    endif
-                  end if
+                    ! ARRAY = ARRAY
+                    caf = -42
+                    a = -42
+                    a(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2) &
+                         = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    sync all
+                    if (this_image() == 1) then
+                      caf(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)[num_images()] &
+                           = b(i:i_e:i_s*i_sgn1, j:j_e:j_s*i_sgn2)
+                    end if
+                    sync all
+
+                    if (this_image() == num_images()) then
+                      if (any (a /= caf)) then
+                        print '(*(g0))', "bounds: ", lb1,":",n+lb1-1,", ", &
+                             lb2,":",m+lb2-1
+                        print '(*(g0))', "section: ", i,":",i_e,":",i_s*i_sgn1, &
+                             ", ", j,":",j_e,":",j_s*i_sgn2
+                        print *, i
+                        print *, a
+                        print *, caf
+                        print *, a-caf
+                        call abort()
+                      endif
+                    end if
+                  end do
                 end do
               end do
             end do
@@ -297,6 +394,5 @@ contains
         end do
       end do
     end do
-  end do
-end subroutine three
-end
+  end subroutine three
+end program main
