diff mbox

[2/2] fort_dyn_array: add basic test coverage

Message ID 1435754532-17922-3-git-send-email-keven.boell@intel.com
State New
Headers show

Commit Message

Keven Boell July 1, 2015, 12:42 p.m. UTC
Add basic test coverage for most dynamic array use-cases
in Fortran.
The commit contains the following tests:
  * Ensure that values of Fortran dynamic arrays
    can be evaluated correctly in various ways and states.
  * Ensure that Fortran primitives can be evaluated
    correctly when used as a dynamic array.
  * Dynamic arrays passed to subroutines and handled
    in different ways inside the routine.
  * Ensure that the ptype of dynamic arrays in
    Fortran can be printed in GDB correctly.
  * Ensure that dynamic arrays in different states
    (allocated/associated) can be evaluated.
  * Dynamic arrays passed to functions and returned from
    functions.
  * History values of dynamic arrays can be accessed and
    printed again with the correct values.
  * Dynamic array evaluations using MI protocol.
  * Sizeof output of dynamic arrays in various states.

2015-03-13  Keven Boell  <keven.boell@intel.com>
            Sanimir Agovic  <sanimir.agovic@intel.com>

testsuite/gdb.fortran:

	* vla-alloc-assoc.exp: New file.
	* vla-datatypes.exp: New file.
	* vla-datatypes.f90: New file.
	* vla-history.exp: New file.
	* vla-ptype-sub.exp: New file.
	* vla-ptype.exp: New file.
	* vla-sizeof.exp: New file.
	* vla-sub.f90: New file.
	* vla-value-sub-arbitrary.exp: New file.
	* vla-value-sub-finish.exp: New file.
	* vla-value-sub.exp: New file.
	* vla-value.exp: New file.
	* vla-ptr-info.exp: New file.
	* vla.f90: New file.

testsuite/gdb.mi:

	* mi-vla-fortran.exp: New file.
	* vla.f90: New file.
---
 gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp      |   65 +++++++
 gdb/testsuite/gdb.fortran/vla-datatypes.exp        |   82 +++++++++
 gdb/testsuite/gdb.fortran/vla-datatypes.f90        |   51 ++++++
 gdb/testsuite/gdb.fortran/vla-history.exp          |   62 +++++++
 gdb/testsuite/gdb.fortran/vla-ptr-info.exp         |   32 ++++
 gdb/testsuite/gdb.fortran/vla-ptype-sub.exp        |   87 ++++++++++
 gdb/testsuite/gdb.fortran/vla-ptype.exp            |   96 +++++++++++
 gdb/testsuite/gdb.fortran/vla-sizeof.exp           |   46 +++++
 gdb/testsuite/gdb.fortran/vla-sub.f90              |   82 +++++++++
 .../gdb.fortran/vla-value-sub-arbitrary.exp        |   35 ++++
 gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp |   49 ++++++
 gdb/testsuite/gdb.fortran/vla-value-sub.exp        |   90 ++++++++++
 gdb/testsuite/gdb.fortran/vla-value.exp            |  148 ++++++++++++++++
 gdb/testsuite/gdb.fortran/vla.f90                  |   56 ++++++
 gdb/testsuite/gdb.mi/mi-vla-fortran.exp            |  182 ++++++++++++++++++++
 gdb/testsuite/gdb.mi/vla.f90                       |   42 +++++
 16 files changed, 1205 insertions(+)
 create mode 100644 gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.f90
 create mode 100644 gdb/testsuite/gdb.fortran/vla-history.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-ptr-info.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-sizeof.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-sub.f90
 create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla-value.exp
 create mode 100644 gdb/testsuite/gdb.fortran/vla.f90
 create mode 100644 gdb/testsuite/gdb.mi/mi-vla-fortran.exp
 create mode 100644 gdb/testsuite/gdb.mi/vla.f90

Comments

Joel Brobecker July 21, 2015, 6:19 p.m. UTC | #1
On Wed, Jul 01, 2015 at 02:42:12PM +0200, Keven Boell wrote:
> Add basic test coverage for most dynamic array use-cases
> in Fortran.
> The commit contains the following tests:
>   * Ensure that values of Fortran dynamic arrays
>     can be evaluated correctly in various ways and states.
>   * Ensure that Fortran primitives can be evaluated
>     correctly when used as a dynamic array.
>   * Dynamic arrays passed to subroutines and handled
>     in different ways inside the routine.
>   * Ensure that the ptype of dynamic arrays in
>     Fortran can be printed in GDB correctly.
>   * Ensure that dynamic arrays in different states
>     (allocated/associated) can be evaluated.
>   * Dynamic arrays passed to functions and returned from
>     functions.
>   * History values of dynamic arrays can be accessed and
>     printed again with the correct values.
>   * Dynamic array evaluations using MI protocol.
>   * Sizeof output of dynamic arrays in various states.
> 
> 2015-03-13  Keven Boell  <keven.boell@intel.com>
>             Sanimir Agovic  <sanimir.agovic@intel.com>
> 
> testsuite/gdb.fortran:
> 
> 	* vla-alloc-assoc.exp: New file.
> 	* vla-datatypes.exp: New file.
> 	* vla-datatypes.f90: New file.
> 	* vla-history.exp: New file.
> 	* vla-ptype-sub.exp: New file.
> 	* vla-ptype.exp: New file.
> 	* vla-sizeof.exp: New file.
> 	* vla-sub.f90: New file.
> 	* vla-value-sub-arbitrary.exp: New file.
> 	* vla-value-sub-finish.exp: New file.
> 	* vla-value-sub.exp: New file.
> 	* vla-value.exp: New file.
> 	* vla-ptr-info.exp: New file.
> 	* vla.f90: New file.
> 
> testsuite/gdb.mi:
> 
> 	* mi-vla-fortran.exp: New file.
> 	* vla.f90: New file.

I only quickly scanned this patch, as it's really huge (huge
is good, in this case).

One general comment is that we avoid re-using the same code
for each test. See: https://sourceware.org/gdb/wiki/GDBTestcaseCookbook#Make_sure_test_executables_are_unique

Even if all testcases end up using the same code, I suggest
making one source file for each testcase, and naming the source
file the same as the .exp files (modulo the extension, of course).
That's a fairly standard practice that makes it easier to associate
testcase and code.


> ---
>  gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp      |   65 +++++++
>  gdb/testsuite/gdb.fortran/vla-datatypes.exp        |   82 +++++++++
>  gdb/testsuite/gdb.fortran/vla-datatypes.f90        |   51 ++++++
>  gdb/testsuite/gdb.fortran/vla-history.exp          |   62 +++++++
>  gdb/testsuite/gdb.fortran/vla-ptr-info.exp         |   32 ++++
>  gdb/testsuite/gdb.fortran/vla-ptype-sub.exp        |   87 ++++++++++
>  gdb/testsuite/gdb.fortran/vla-ptype.exp            |   96 +++++++++++
>  gdb/testsuite/gdb.fortran/vla-sizeof.exp           |   46 +++++
>  gdb/testsuite/gdb.fortran/vla-sub.f90              |   82 +++++++++
>  .../gdb.fortran/vla-value-sub-arbitrary.exp        |   35 ++++
>  gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp |   49 ++++++
>  gdb/testsuite/gdb.fortran/vla-value-sub.exp        |   90 ++++++++++
>  gdb/testsuite/gdb.fortran/vla-value.exp            |  148 ++++++++++++++++
>  gdb/testsuite/gdb.fortran/vla.f90                  |   56 ++++++
>  gdb/testsuite/gdb.mi/mi-vla-fortran.exp            |  182 ++++++++++++++++++++
>  gdb/testsuite/gdb.mi/vla.f90                       |   42 +++++
>  16 files changed, 1205 insertions(+)
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.f90
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-history.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptr-info.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-sizeof.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-sub.f90
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/vla.f90
>  create mode 100644 gdb/testsuite/gdb.mi/mi-vla-fortran.exp
>  create mode 100644 gdb/testsuite/gdb.mi/vla.f90
> 
> diff --git a/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
> new file mode 100644
> index 0000000..542b65c
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
> @@ -0,0 +1,65 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Let's try to standardize a bit on how we write testcases. We have
a "cookbook" for testcases at...

    https://sourceware.org/gdb/wiki/GDBTestcaseCookbook

... and it shows how to handle runto failures:

   untested "could not run to main"
   return -1



> +
> +# Check the association status of various types of VLA's
> +# and pointer to VLA's.
> +gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
> +gdb_continue_to_breakpoint "vla1-allocated"
> +gdb_test "print l" " = \\.TRUE\\." \
> +  "print vla1 allocation status (allocated)"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "print l" " = \\.TRUE\\." \
> +  "print vla2 allocation status (allocated)"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test "print l" " = \\.TRUE\\." \
> +  "print pvla associated status (associated)"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
> +gdb_continue_to_breakpoint "pvla-re-associated"
> +gdb_test "print l" " = \\.TRUE\\." \
> +  "print pvla associated status (re-associated)"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
> +gdb_continue_to_breakpoint "pvla-deassociated"
> +gdb_test "print l" " = \\.FALSE\\." \
> +  "print pvla allocation status (deassociated)"
> +
> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
> +gdb_continue_to_breakpoint "vla1-deallocated"
> +gdb_test "print l" " = \\.FALSE\\." \
> +  "print vla1 allocation status (deallocated)"
> +gdb_test "print vla1" " = <not allocated>" \
> +  "print deallocated vla1"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
> +gdb_continue_to_breakpoint "vla2-deallocated"
> +gdb_test "print l" " = \\.FALSE\\." "print vla2 deallocated"
> +gdb_test "print vla2" " = <not allocated>" "print deallocated vla2"
> diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.exp b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
> new file mode 100644
> index 0000000..a61cb70
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
> @@ -0,0 +1,82 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile ".f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +# check that all fortran standard datatypes will be
> +# handled correctly when using as VLA's
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same as above.

> +
> +gdb_breakpoint [gdb_get_line_number "vlas-allocated"]
> +gdb_continue_to_breakpoint "vlas-allocated"
> +gdb_test "next" " = allocated\\\(realvla\\\)" \
> +  "next to allocation status of intvla"
> +gdb_test "print l" " = \\.TRUE\\." "intvla allocated"
> +gdb_test "next" " = allocated\\\(complexvla\\\)" \
> +  "next to allocation status of realvla"
> +gdb_test "print l" " = \\.TRUE\\." "realvla allocated"
> +gdb_test "next" " = allocated\\\(logicalvla\\\)" \
> +  "next to allocation status of complexvla"
> +gdb_test "print l" " = \\.TRUE\\." "complexvla allocated"
> +gdb_test "next" " = allocated\\\(charactervla\\\)" \
> +  "next to allocation status of logicalvla"
> +gdb_test "print l" " = \\.TRUE\\." "logicalvla allocated"
> +gdb_test "next" "intvla\\\(:,:,:\\\) = 1" \
> +  "next to allocation status of charactervla"
> +gdb_test "print l" " = \\.TRUE\\." "charactervla allocated"
> +
> +gdb_breakpoint [gdb_get_line_number "vlas-initialized"]
> +gdb_continue_to_breakpoint "vlas-initialized"
> +gdb_test "ptype intvla" "type = integer\\\(kind=4\\\) \\\(11,22,33\\\)" \
> +  "ptype intvla"
> +gdb_test "ptype realvla" "type = real\\\(kind=4\\\) \\\(11,22,33\\\)" \
> +  "ptype realvla"
> +gdb_test "ptype complexvla" "type = complex\\\(kind=4\\\) \\\(11,22,33\\\)" \
> +  "ptype complexvla"
> +gdb_test "ptype logicalvla" "type = logical\\\(kind=4\\\) \\\(11,22,33\\\)" \
> +  "ptype logicalvla"
> +gdb_test "ptype charactervla" "type = character\\\*1 \\\(11,22,33\\\)" \
> +  "ptype charactervla"
> +
> +gdb_test "print intvla(5,5,5)" " = 1" "print intvla(5,5,5) (1st)"
> +gdb_test "print realvla(5,5,5)" " = 3.14\\d+" \
> +  "print realvla(5,5,5) (1st)"
> +gdb_test "print complexvla(5,5,5)" " = \\\(2,-3\\\)" \
> +  "print complexvla(5,5,5) (1st)"
> +gdb_test "print logicalvla(5,5,5)" " = \\.TRUE\\." \
> +  "print logicalvla(5,5,5) (1st)"
> +gdb_test "print charactervla(5,5,5)" " = 'K'" \
> +  "print charactervla(5,5,5) (1st)"
> +
> +gdb_breakpoint [gdb_get_line_number "vlas-modified"]
> +gdb_continue_to_breakpoint "vlas-modified"
> +gdb_test "print intvla(5,5,5)" " = 42" "print intvla(5,5,5) (2nd)"
> +gdb_test "print realvla(5,5,5)" " = 4.13\\d+" \
> +  "print realvla(5,5,5) (2nd)"
> +gdb_test "print complexvla(5,5,5)" " = \\\(-3,2\\\)" \
> +  "print complexvla(5,5,5) (2nd)"
> +gdb_test "print logicalvla(5,5,5)" " = \\.FALSE\\." \
> +  "print logicalvla(5,5,5) (2nd)"
> +gdb_test "print charactervla(5,5,5)" " = 'X'" \
> +  "print charactervla(5,5,5) (2nd)"
> diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.f90 b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
> new file mode 100644
> index 0000000..db25695
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
> @@ -0,0 +1,51 @@
> +! Copyright 2015 Free Software Foundation, Inc.
> +!
> +! This program is free software; you can redistribute it and/or modify
> +! it under the terms of the GNU General Public License as published by
> +! the Free Software Foundation; either version 2 of the License, or
> +! (at your option) any later version.
> +!
> +! This program is distributed in the hope that it will be useful,
> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +! GNU General Public License for more details.
> +!
> +! You should have received a copy of the GNU General Public License
> +! along with this program; if not, write to the Free Software
> +! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> +
> +program vla_primitives
> +  integer, allocatable    :: intvla(:, :, :)
> +  real, allocatable       :: realvla(:, :, :)
> +  complex, allocatable    :: complexvla(:, :, :)
> +  logical, allocatable    :: logicalvla(:, :, :)
> +  character, allocatable  :: charactervla(:, :, :)
> +  logical                 :: l
> +
> +  allocate (intvla (11,22,33))
> +  allocate (realvla (11,22,33))
> +  allocate (complexvla (11,22,33))
> +  allocate (logicalvla (11,22,33))
> +  allocate (charactervla (11,22,33))
> +
> +  l = allocated(intvla)                   ! vlas-allocated
> +  l = allocated(realvla)
> +  l = allocated(complexvla)
> +  l = allocated(logicalvla)
> +  l = allocated(charactervla)
> +
> +  intvla(:,:,:) = 1
> +  realvla(:,:,:) = 3.14
> +  complexvla(:,:,:) = cmplx(2.0,-3.0)
> +  logicalvla(:,:,:) = .TRUE.
> +  charactervla(:,:,:) = char(75)
> +
> +  intvla(5,5,5) = 42                      ! vlas-initialized
> +  realvla(5,5,5) = 4.13
> +  complexvla(5,5,5) = cmplx(-3.0,2.0)
> +  logicalvla(5,5,5) = .FALSE.
> +  charactervla(5,5,5) = 'X'
> +
> +  ! dummy statement for bp
> +  l = .FALSE.                             ! vlas-modified
> +end program vla_primitives
> diff --git a/gdb/testsuite/gdb.fortran/vla-history.exp b/gdb/testsuite/gdb.fortran/vla-history.exp
> new file mode 100644
> index 0000000..d56519c
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-history.exp
> @@ -0,0 +1,62 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same as above.

> +
> +# Set some breakpoints and print complete vla.
> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
> +gdb_continue_to_breakpoint "vla1-init"
> +gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "print vla1" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
> +  "print vla1 allocated"
> +gdb_test "print vla2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
> +  "print vla2 allocated"
> +
> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
> +gdb_continue_to_breakpoint "vla1-filled"
> +gdb_test "print vla1" \
> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
> +  "print vla1 filled"
> +
> +# Try to access history values for full vla prints.
> +gdb_test "print \$1" " = <not allocated>" "print \$1"
> +gdb_test "print \$2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
> +  "print \$2"
> +gdb_test "print \$3" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
> +  "print \$3"
> +gdb_test "print \$4" \
> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" "print \$4"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-filled"]
> +gdb_continue_to_breakpoint "vla2-filled"
> +gdb_test "print vla2(1,43,20)" " = 1311" "print vla2(1,43,20)"
> +gdb_test "print vla1(1,3,8)" " = 1001" "print vla2(1,3,8)"
> +
> +# Try to access history values for vla values.
> +gdb_test "print \$9" " = 1311" "print \$9"
> +gdb_test "print \$10" " = 1001" "print \$10"
> diff --git a/gdb/testsuite/gdb.fortran/vla-ptr-info.exp b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
> new file mode 100644
> index 0000000..b2d8f00
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
> @@ -0,0 +1,32 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue

Same remark as above.

> +}
> +
> +# Check the status of a pointer to a dynamic array.
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\)\\)\\) ${hex}" \
> +  "print pvla pointer information"
> diff --git a/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
> new file mode 100644
> index 0000000..98fd663
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
> @@ -0,0 +1,87 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla-sub.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same as above.

> +
> +# Pass fixed array to function and handle them as vla in function.
> +gdb_breakpoint [gdb_get_line_number "not-filled"]
> +gdb_continue_to_breakpoint "not-filled (1st)"
> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(42,42\\\)" \
> +  "ptype array1 (passed fixed)"
> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(42,42,42\\\)" \
> +  "ptype array2 (passed fixed)"
> +gdb_test "ptype array1(40, 10)" "type = integer\\\(kind=4\\\)" \
> +  "ptype array1(40, 10) (passed fixed)"
> +gdb_test "ptype array2(13, 11, 5)" "type = real\\\(kind=4\\\)" \
> +  "ptype array2(13, 11, 5) (passed fixed)"
> +
> +# Pass sub arrays to function and handle them as vla in function.
> +gdb_continue_to_breakpoint "not-filled (2nd)"
> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(6,6\\\)" \
> +  "ptype array1 (passed sub-array)"
> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(6,6,6\\\)" \
> +  "ptype array2 (passed sub-array)"
> +gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
> +  "ptype array1(3, 3) (passed sub-array)"
> +gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
> +  "ptype array2(4, 4, 4) (passed sub-array)"
> +
> +# Check ptype outside of bounds. This should not crash GDB.

Missing second space after a period.

> +gdb_test "ptype array1(100, 100)" "no such vector element" \
> +  "ptype array1(100, 100) subarray do not crash (passed sub-array)"
> +gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
> +  "ptype array2(100, 100, 100) subarray do not crash (passed sub-array)"
> +
> +# Pass vla to function.
> +gdb_continue_to_breakpoint "not-filled (3rd)"
> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(20,20\\\)" \
> +  "ptype array1 (passed vla)"
> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
> +  "ptype array2 (passed vla)"
> +gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
> +  "ptype array1(3, 3) (passed vla)"
> +gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
> +  "ptype array2(4, 4, 4) (passed vla)"
> +
> +# Check ptype outside of bounds. This should not crash GDB.

Same here.

> +gdb_test "ptype array1(100, 100)" "no such vector element" \
> +  "ptype array1(100, 100) VLA do not crash (passed vla)"
> +gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
> +  "ptype array2(100, 100, 100) VLA do not crash (passed vla)"
> +
> +# Pass fixed array to function and handle it as VLA of arbitrary length in
> +# function.
> +gdb_breakpoint [gdb_get_line_number "end-of-bar"]
> +gdb_continue_to_breakpoint "end-of-bar"
> +gdb_test "ptype array1" \
> +  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(\\*\\)\\)?" \
> +  "ptype array1 (arbitrary length)"
> +gdb_test "ptype array2" \
> +  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(4:9,10:\\*\\)\\)?" \
> +  "ptype array2 (arbitrary length)"
> +gdb_test "ptype array1(100)" "type = integer\\\(kind=4\\\)" \
> +  "ptype array1(100) (arbitrary length)"
> +gdb_test "ptype array2(4,100)" "type = integer\\\(kind=4\\\)" \
> +  "ptype array2(4,100) (arbitrary length)"
> diff --git a/gdb/testsuite/gdb.fortran/vla-ptype.exp b/gdb/testsuite/gdb.fortran/vla-ptype.exp
> new file mode 100644
> index 0000000..cd47bbe
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-ptype.exp
> @@ -0,0 +1,96 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue

Same remark as before.

> +}
> +
> +# Check the ptype of various VLA states and pointer to VLA's.
> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
> +gdb_continue_to_breakpoint "vla1-init"
> +gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not initialized"
> +gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not initialized"
> +gdb_test "ptype pvla" "type = <not associated>" "ptype pvla not initialized"
> +gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
> +  "ptype vla1(3, 6, 9) not initialized"
> +gdb_test "ptype vla2(5, 45, 20)" \
> +  "no such vector element because not allocated" \
> +  "ptype vla1(5, 45, 20) not initialized"
> +
> +gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
> +gdb_continue_to_breakpoint "vla1-allocated"
> +gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
> +  "ptype vla1 allocated"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
> +  "ptype vla2 allocated"
> +
> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
> +gdb_continue_to_breakpoint "vla1-filled"
> +gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
> +  "ptype vla1 filled"
> +gdb_test "ptype vla1(3, 6, 9)" "type = real\\\(kind=4\\\)" \
> +  "ptype vla1(3, 6, 9)"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-filled"]
> +gdb_continue_to_breakpoint "vla2-filled"
> +gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
> +  "ptype vla2 filled"
> +gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
> +  "ptype vla1(5, 45, 20) filled"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
> +  "ptype pvla associated"
> +gdb_test "ptype pvla(3, 6, 9)" "type = real\\\(kind=4\\\)" \
> +  "ptype pvla(3, 6, 9)"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
> +gdb_continue_to_breakpoint "pvla-re-associated"
> +gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
> +  "ptype pvla re-associated"
> +gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
> +  "ptype vla1(5, 45, 20) re-associated"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
> +gdb_continue_to_breakpoint "pvla-deassociated"
> +gdb_test "ptype pvla" "type = <not associated>" "ptype pvla deassociated"
> +gdb_test "ptype pvla(5, 45, 20)" \
> +  "no such vector element because not associated" \
> +  "ptype pvla(5, 45, 20) not associated"
> +
> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
> +gdb_continue_to_breakpoint "vla1-deallocated"
> +gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not allocated"
> +gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
> +  "ptype vla1(3, 6, 9) not allocated"
> +
> +gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
> +gdb_continue_to_breakpoint "vla2-deallocated"
> +gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not allocated"
> +gdb_test "ptype vla2(5, 45, 20)" \
> +  "no such vector element because not allocated" \
> +  "ptype vla2(5, 45, 20) not allocated"
> diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
> new file mode 100644
> index 0000000..8281425
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
> @@ -0,0 +1,46 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue

Same remark as before.

> +}
> +
> +# Try to access values in non allocated VLA
> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
> +gdb_continue_to_breakpoint "vla1-init"
> +gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
> +
> +# Try to access value in allocated VLA
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "print sizeof(vla1)" " = 4000" "print sizeof allocated vla1"
> +
> +# Try to access values in undefined pointer to VLA (dangling)
> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
> +gdb_continue_to_breakpoint "vla1-filled"
> +gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
> +
> +# Try to access values in pointer to VLA and compare them
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
> diff --git a/gdb/testsuite/gdb.fortran/vla-sub.f90 b/gdb/testsuite/gdb.fortran/vla-sub.f90
> new file mode 100644
> index 0000000..dfda411
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-sub.f90
> @@ -0,0 +1,82 @@
> +! Copyright 2015 Free Software Foundation, Inc.
> +!
> +! This program is free software; you can redistribute it and/or modify
> +! it under the terms of the GNU General Public License as published by
> +! the Free Software Foundation; either version 2 of the License, or
> +! (at your option) any later version.
> +!
> +! This program is distributed in the hope that it will be useful,
> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +! GNU General Public License for more details.
> +!
> +! You should have received a copy of the GNU General Public License
> +! along with this program; if not, write to the Free Software
> +! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> +!
> +! Original file written by Jakub Jelinek <jakub@redhat.com> and
> +! Jan Kratochvil <jan.kratochvil@redhat.com>.
> +! Modified for the GDB testcases by Keven Boell <keven.boell@intel.com>.
> +
> +subroutine foo (array1, array2)
> +  integer :: array1 (:, :)
> +  real    :: array2 (:, :, :)
> +
> +  array1(:,:) = 5                       ! not-filled
> +  array1(1, 1) = 30
> +
> +  array2(:,:,:) = 6                     ! array1-filled
> +  array2(:,:,:) = 3
> +  array2(1,1,1) = 30
> +  array2(3,3,3) = 90                    ! array2-almost-filled
> +end subroutine
> +
> +subroutine bar (array1, array2)
> +  integer :: array1 (*)
> +  integer :: array2 (4:9, 10:*)
> +
> +  array1(5:10) = 1311
> +  array1(7) = 1
> +  array1(100) = 100
> +  array2(4,10) = array1(7)
> +  array2(4,100) = array1(7)
> +  return                                ! end-of-bar
> +end subroutine
> +
> +program vla_sub
> +  interface
> +    subroutine foo (array1, array2)
> +      integer :: array1 (:, :)
> +      real :: array2 (:, :, :)
> +    end subroutine
> +  end interface
> +  interface
> +    subroutine bar (array1, array2)
> +      integer :: array1 (*)
> +      integer :: array2 (4:9, 10:*)
> +    end subroutine
> +  end interface
> +
> +  real, allocatable :: vla1 (:, :, :)
> +  integer, allocatable :: vla2 (:, :)
> +
> +  ! used for subroutine
> +  integer :: sub_arr1(42, 42)
> +  real    :: sub_arr2(42, 42, 42)
> +  integer :: sub_arr3(42)
> +
> +  sub_arr1(:,:) = 1                   ! vla2-deallocated
> +  sub_arr2(:,:,:) = 2
> +  sub_arr3(:) = 3
> +
> +  call foo(sub_arr1, sub_arr2)
> +  call foo(sub_arr1(5:10, 5:10), sub_arr2(10:15,10:15,10:15))
> +
> +  allocate (vla1 (10,10,10))
> +  allocate (vla2 (20,20))
> +  vla1(:,:,:) = 1311
> +  vla2(:,:) = 42
> +  call foo(vla2, vla1)
> +
> +  call bar(sub_arr3, sub_arr1)
> +end program vla_sub
> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
> new file mode 100644
> index 0000000..88defda
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
> @@ -0,0 +1,35 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla-sub.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue

Same remark as before.

> +}
> +
> +# Check VLA with arbitary length and check that elements outside of
> +# bounds of the passed VLA can be accessed correctly.
> +gdb_breakpoint [gdb_get_line_number "end-of-bar"]
> +gdb_continue_to_breakpoint "end-of-bar"
> +gdb_test "p array1(42)" " = 3" "print arbitary array1(42)"
> +gdb_test "p array1(100)" " = 100" "print arbitary array1(100)"
> +gdb_test "p array2(4,10)" " = 1" "print arbitary array2(4,10)"
> +gdb_test "p array2(4,100)" " = 1" "print arbitary array2(4,100)"
> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
> new file mode 100644
> index 0000000..6738875
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
> @@ -0,0 +1,49 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla-sub.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same Remark as before.

> +
> +# "up" works with GCC but other Fortran compilers may copy the values into the
> +# outer function only on the exit of the inner function.
> +# We need both variants as depending on the arch we optionally may still be
> +# executing the caller line or not after `finish'.
> +
> +gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
> +gdb_continue_to_breakpoint "array2-almost-filled"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was filled"
> +gdb_test "print array2(2,1,1)=20" " = 20" \
> +  "set array(2,2,2) to 20 in subroutine"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was mofified in debugger"
> +
> +gdb_test "finish" \
> +  ".*(foo\\\(sub_arr1\\\(5:10, 5:10\\\), sub_arr2\\\(10:15,10:15,10:15\\\)\\\)|foo \\\(array1=..., array2=...\\\).*)" \
> +  "finish function"
> +gdb_test "p sub_arr1(5, 7)" " = 5" "sub_arr1(5, 7) after finish"
> +gdb_test "p sub_arr1(1, 1)" " = 30" "sub_arr1(1, 1) after finish"
> +gdb_test "p sub_arr2(1, 1, 1)" " = 30" "sub_arr2(1, 1, 1) after finish"
> +gdb_test "p sub_arr2(2, 1, 1)" " = 20" "sub_arr2(2, 1, 1) after finish"
> +
> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub.exp b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
> new file mode 100644
> index 0000000..de88333
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
> @@ -0,0 +1,90 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla-sub.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +    {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same remark as before.

> +
> +# Check the values of VLA's in subroutine can be evaluated correctly
> +
> +# Try to access values from a fixed array handled as VLA in subroutine.
> +gdb_breakpoint [gdb_get_line_number "not-filled"]
> +gdb_continue_to_breakpoint "not-filled (1st)"
> +gdb_test "print array1" " = \\(\[()1, .\]*\\)" \
> +  "print passed array1 in foo (passed fixed array)"
> +
> +gdb_breakpoint [gdb_get_line_number "array1-filled"]
> +gdb_continue_to_breakpoint "array1-filled (1st)"
> +gdb_test "print array1(5, 7)" " = 5" \
> +  "print array1(5, 7) after filled in foo (passed fixed array)"
> +gdb_test "print array1(1, 1)" " = 30" \
> +  "print array1(1, 1) after filled in foo (passed fixed array)"
> +
> +gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
> +gdb_continue_to_breakpoint "array2-almost-filled (1st)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was filled (passed fixed array)"
> +gdb_test "print array2(2,1,1)=20" " = 20" \
> +  "set array(2,2,2) to 20 in subroutine (passed fixed array)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was mofified in debugger (passed fixed array)"
> +
> +
> +# Try to access values from a fixed sub-array handled as VLA in subroutine.
> +gdb_continue_to_breakpoint "not-filled (2nd)"
> +gdb_test "print array1" " = \\(\[()5, .\]*\\)" \
> +  "print passed array1 in foo (passed sub-array)"
> +
> +gdb_continue_to_breakpoint "array1-filled (2nd)"
> +gdb_test "print array1(5, 5)" " = 5" \
> +  "print array1(5, 5) after filled in foo (passed sub-array)"
> +gdb_test "print array1(1, 1)" " = 30" \
> +  "print array1(1, 1) after filled in foo (passed sub-array)"
> +
> +gdb_continue_to_breakpoint "array2-almost-filled (2nd)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was filled (passed sub-array)"
> +gdb_test "print array2(2,1,1)=20" " = 20" \
> +  "set array(2,2,2) to 20 in subroutine (passed sub-array)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was mofified in debugger (passed sub-array)"
> +
> +
> +# Try to access values from a VLA passed to subroutine.
> +gdb_continue_to_breakpoint "not-filled (3rd)"
> +gdb_test "print array1" " = \\(\[()42, .\]*\\)" \
> +  "print passed array1 in foo (passed vla)"
> +
> +gdb_continue_to_breakpoint "array1-filled (3rd)"
> +gdb_test "print array1(5, 5)" " = 5" \
> +  "print array1(5, 5) after filled in foo (passed vla)"
> +gdb_test "print array1(1, 1)" " = 30" \
> +  "print array1(1, 1) after filled in foo (passed vla)"
> +
> +gdb_continue_to_breakpoint "array2-almost-filled (3rd)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was filled (passed vla)"
> +gdb_test "print array2(2,1,1)=20" " = 20" \
> +  "set array(2,2,2) to 20 in subroutine (passed vla)"
> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
> +  "print array2 in foo after it was mofified in debugger (passed vla)"
> diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran/vla-value.exp
> new file mode 100644
> index 0000000..6ea1eff
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla-value.exp
> @@ -0,0 +1,148 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +standard_testfile "vla.f90"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +     {debug f90 quiet}] } {
> +    return -1
> +}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}

Same remark as before.

> +
> +# Try to access values in non allocated VLA
> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
> +gdb_continue_to_breakpoint "vla1-init"
> +gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
> +gdb_test "print &vla1" \
> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not allocated>\\\)\\\)\\\) $hex" \
> +  "print non-allocated &vla1"
> +gdb_test "print vla1(1,1,1)" "no such vector element because not allocated" \
> +  "print member in non-allocated vla1 (1)"
> +gdb_test "print vla1(101,202,303)" \
> +  "no such vector element because not allocated" \
> +  "print member in non-allocated vla1 (2)"
> +gdb_test "print vla1(5,2,18)=1" "no such vector element because not allocated" \
> +  "set member in non-allocated vla1"
> +
> +# Try to access value in allocated VLA
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "next" "\\d+(\\t|\\s)+vla1\\\(3, 6, 9\\\) = 42" \
> +  "step over value assignment of vla1"
> +gdb_test "print &vla1" \
> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
> +  "print allocated &vla1"
> +gdb_test "print vla1(3, 6, 9)" " = 1311" "print allocated vla1(3,6,9)"
> +gdb_test "print vla1(1, 3, 8)" " = 1311" "print allocated vla1(1,3,8)"
> +gdb_test "print vla1(9, 9, 9) = 999" " = 999" \
> +  "print allocated vla1(9,9,9)=1"
> +
> +# Try to access values in allocated VLA after specific assignment
> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
> +gdb_continue_to_breakpoint "vla1-filled"
> +gdb_test "print vla1(3, 6, 9)" " = 42" \
> +  "print allocated vla1(3,6,9) after specific assignment (filled)"
> +gdb_test "print vla1(1, 3, 8)" " = 1001" \
> +  "print allocated vla1(1,3,8) after specific assignment (filled)"
> +gdb_test "print vla1(9, 9, 9)" " = 999" \
> +  "print allocated vla1(9,9,9) after assignment in debugger (filled)"
> +
> +# Try to access values in undefined pointer to VLA (dangling)
> +gdb_test "print pvla" " = <not associated>" "print undefined pvla"
> +gdb_test "print &pvla" \
> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not associated>\\\)\\\)\\\) $hex" \
> +  "print non-associated &pvla"
> +gdb_test "print pvla(1, 3, 8)" "no such vector element because not associated" \
> +  "print undefined pvla(1,3,8)"
> +
> +# Try to access values in pointer to VLA and compare them
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test "print &pvla" \
> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
> +  "print associated &pvla"
> +gdb_test "print pvla(3, 6, 9)" " = 42" "print associated pvla(3,6,9)"
> +gdb_test "print pvla(1, 3, 8)" " = 1001" "print associated pvla(1,3,8)"
> +gdb_test "print pvla(9, 9, 9)" " = 999" "print associated pvla(9,9,9)"
> +
> +# Fill values to VLA using pointer and check
> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
> +gdb_continue_to_breakpoint "pvla-re-associated"
> +gdb_test "print pvla(5, 45, 20)" \
> +  " = 1" "print pvla(5, 45, 20) after filled using pointer"
> +gdb_test "print vla2(5, 45, 20)" \
> +  " = 1" "print vla2(5, 45, 20) after filled using pointer"
> +gdb_test "print pvla(7, 45, 14)" " = 2" \
> +  "print pvla(7, 45, 14) after filled using pointer"
> +gdb_test "print vla2(7, 45, 14)" " = 2" \
> +  "print vla2(7, 45, 14) after filled using pointer"
> +
> +# Try to access values of deassociated VLA pointer
> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
> +gdb_continue_to_breakpoint "pvla-deassociated"
> +gdb_test "print pvla(5, 45, 20)" \
> +  "no such vector element because not associated" \
> +  "print pvla(5, 45, 20) after deassociated"
> +gdb_test "print pvla(7, 45, 14)" \
> +  "no such vector element because not associated" \
> +  "print pvla(7, 45, 14) after dissasociated"
> +gdb_test "print pvla" " = <not associated>" \
> +  "print vla1 after deassociated"
> +
> +# Try to access values of deallocated VLA
> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
> +gdb_continue_to_breakpoint "vla1-deallocated"
> +gdb_test "print vla1(3, 6, 9)" "no such vector element because not allocated" \
> +  "print allocated vla1(3,6,9) after specific assignment (deallocated)"
> +gdb_test "print vla1(1, 3, 8)" "no such vector element because not allocated" \
> +  "print allocated vla1(1,3,8) after specific assignment (deallocated)"
> +gdb_test "print vla1(9, 9, 9)" "no such vector element because not allocated" \
> +  "print allocated vla1(9,9,9) after assignment in debugger (deallocated)"
> +
> +
> +# Try to assign VLA to user variable
> +clean_restart ${testfile}
> +
> +if ![runto MAIN__] then {
> +    perror "couldn't run to breakpoint MAIN__"
> +    continue
> +}
> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
> +gdb_continue_to_breakpoint "vla2-allocated"
> +gdb_test "next" "\\d+.*vla1\\(3, 6, 9\\) = 42" "next (1)"
> +
> +gdb_test_no_output "set \$myvar = vla1" "set \$myvar = vla1"
> +gdb_test "print \$myvar" \
> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
> +  "print \$myvar set to vla1"
> +
> +gdb_test "next" "\\d+.*vla1\\(1, 3, 8\\) = 1001" "next (2)"
> +gdb_test "print \$myvar(3,6,9)" " = 1311" "print \$myvar(3,6,9)"
> +
> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
> +gdb_continue_to_breakpoint "pvla-associated"
> +gdb_test_no_output "set \$mypvar = pvla" "set \$mypvar = pvla"
> +gdb_test "print \$mypvar(1,3,8)" " = 1001" "print \$mypvar(1,3,8)"
> +
> +# deallocate pointer and make sure user defined variable still has the
> +# right value.
> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
> +gdb_continue_to_breakpoint "pvla-deassociated"
> +gdb_test "print \$mypvar(1,3,8)" " = 1001" \
> +  "print \$mypvar(1,3,8) after deallocated"
> diff --git a/gdb/testsuite/gdb.fortran/vla.f90 b/gdb/testsuite/gdb.fortran/vla.f90
> new file mode 100644
> index 0000000..61e22b9
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/vla.f90
> @@ -0,0 +1,56 @@
> +! Copyright 2015 Free Software Foundation, Inc.
> +!
> +! This program is free software; you can redistribute it and/or modify
> +! it under the terms of the GNU General Public License as published by
> +! the Free Software Foundation; either version 3 of the License, or
> +! (at your option) any later version.
> +!
> +! This program is distributed in the hope that it will be useful,
> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +! GNU General Public License for more details.
> +!
> +! You should have received a copy of the GNU General Public License
> +! along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +program vla
> +  real, target, allocatable :: vla1 (:, :, :)
> +  real, target, allocatable :: vla2 (:, :, :)
> +  real, target, allocatable :: vla3 (:, :)
> +  real, pointer :: pvla (:, :, :)
> +  logical :: l
> +
> +  allocate (vla1 (10,10,10))          ! vla1-init
> +  l = allocated(vla1)
> +
> +  allocate (vla2 (1:7,42:50,13:35))   ! vla1-allocated
> +  l = allocated(vla2)
> +
> +  vla1(:, :, :) = 1311                ! vla2-allocated
> +  vla1(3, 6, 9) = 42
> +  vla1(1, 3, 8) = 1001
> +  vla1(6, 2, 7) = 13
> +
> +  vla2(:, :, :) = 1311                ! vla1-filled
> +  vla2(5, 45, 20) = 42
> +
> +  pvla => vla1                        ! vla2-filled
> +  l = associated(pvla)
> +
> +  pvla => vla2                        ! pvla-associated
> +  l = associated(pvla)
> +  pvla(5, 45, 20) = 1
> +  pvla(7, 45, 14) = 2
> +
> +  pvla => null()                      ! pvla-re-associated
> +  l = associated(pvla)
> +
> +  deallocate (vla1)                   ! pvla-deassociated
> +  l = allocated(vla1)
> +
> +  deallocate (vla2)                   ! vla1-deallocated
> +  l = allocated(vla2)
> +
> +  allocate (vla3 (2,2))               ! vla2-deallocated
> +  vla3(:,:) = 13
> +end program vla
> diff --git a/gdb/testsuite/gdb.mi/mi-vla-fortran.exp b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
> new file mode 100644
> index 0000000..d191623
> --- /dev/null
> +++ b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
> @@ -0,0 +1,182 @@
> +# Copyright 2015 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# Verify that, using the MI, we can evaluate a simple C Variable Length
> +# Array (VLA).
> +
> +load_lib mi-support.exp
> +set MIFLAGS "-i=mi"
> +
> +gdb_exit
> +if [mi_gdb_start] {
> +    continue
> +}
> +
> +standard_testfile vla.f90
> +
> +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
> +     {debug f90}] != "" } {
> +     untested mi-vla-fortran.exp
> +     return -1
> +}
> +
> +mi_delete_breakpoints
> +mi_gdb_reinitialize_dir $srcdir/$subdir
> +mi_gdb_load ${binfile}
> +
> +set bp_lineno [gdb_get_line_number "vla1-not-allocated"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 1 "del" "vla" \
> +  ".*vla.f90" $bp_lineno $hex \
> +  "insert breakpoint at line $bp_lineno (vla not allocated)"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "500-data-evaluate-expression vla1" \
> +  "500\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
> +
> +mi_create_varobj_checked vla1_not_allocated vla1 "<not allocated>" \
> +  "create local variable vla1_not_allocated"
> +mi_gdb_test "501-var-info-type vla1_not_allocated" \
> +  "501\\^done,type=\"<not allocated>\"" \
> +  "info type variable vla1_not_allocated"
> +mi_gdb_test "502-var-show-format vla1_not_allocated" \
> +  "502\\^done,format=\"natural\"" \
> +  "show format variable vla1_not_allocated"
> +mi_gdb_test "503-var-evaluate-expression vla1_not_allocated" \
> +  "503\\^done,value=\"\\\[0\\\]\"" \
> +  "eval variable vla1_not_allocated"
> +mi_list_array_varobj_children_with_index "vla1_not_allocated" "0" "1" \
> +    "real\\\(kind=4\\\)" "get children of vla1_not_allocated"
> +
> +
> +
> +set bp_lineno [gdb_get_line_number "vla1-allocated"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 2 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno (vla allocated)"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "510-data-evaluate-expression vla1" \
> +  "510\\^done,value=\"\\(0, 0, 0, 0, 0\\)\"" "evaluate allocated vla"
> +
> +mi_create_varobj_checked vla1_allocated vla1 "real\\\(kind=4\\\) \\\(5\\\)" \
> +  "create local variable vla1_allocated"
> +mi_gdb_test "511-var-info-type vla1_allocated" \
> +  "511\\^done,type=\"real\\\(kind=4\\\) \\\(5\\\)\"" \
> +  "info type variable vla1_allocated"
> +mi_gdb_test "512-var-show-format vla1_allocated" \
> +  "512\\^done,format=\"natural\"" \
> +  "show format variable vla1_allocated"
> +mi_gdb_test "513-var-evaluate-expression vla1_allocated" \
> +  "513\\^done,value=\"\\\[5\\\]\"" \
> +  "eval variable vla1_allocated"
> +mi_list_array_varobj_children_with_index "vla1_allocated" "5" "1" \
> +    "real\\\(kind=4\\\)" "get children of vla1_allocated"
> +
> +
> +set bp_lineno [gdb_get_line_number "vla1-filled"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 3 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "520-data-evaluate-expression vla1" \
> +  "520\\^done,value=\"\\(1, 1, 1, 1, 1\\)\"" "evaluate filled vla"
> +
> +
> +set bp_lineno [gdb_get_line_number "vla1-modified"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 4 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "530-data-evaluate-expression vla1" \
> +  "530\\^done,value=\"\\(1, 42, 1, 24, 1\\)\"" "evaluate filled vla"
> +mi_gdb_test "540-data-evaluate-expression vla1(1)" \
> +  "540\\^done,value=\"1\"" "evaluate filled vla"
> +mi_gdb_test "550-data-evaluate-expression vla1(2)" \
> +  "550\\^done,value=\"42\"" "evaluate filled vla"
> +mi_gdb_test "560-data-evaluate-expression vla1(4)" \
> +  "560\\^done,value=\"24\"" "evaluate filled vla"
> +
> +
> +set bp_lineno [gdb_get_line_number "vla1-deallocated"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 5 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "570-data-evaluate-expression vla1" \
> +  "570\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
> +
> +
> +set bp_lineno [gdb_get_line_number "pvla2-not-associated"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 6 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "580-data-evaluate-expression pvla2" \
> +  "580\\^done,value=\"<not associated>\"" "evaluate not associated vla"
> +
> +mi_create_varobj_checked pvla2_not_associated pvla2 "<not associated>" \
> +  "create local variable pvla2_not_associated"
> +mi_gdb_test "581-var-info-type pvla2_not_associated" \
> +  "581\\^done,type=\"<not associated>\"" \
> +  "info type variable pvla2_not_associated"
> +mi_gdb_test "582-var-show-format pvla2_not_associated" \
> +  "582\\^done,format=\"natural\"" \
> +  "show format variable pvla2_not_associated"
> +mi_gdb_test "583-var-evaluate-expression pvla2_not_associated" \
> +  "583\\^done,value=\"\\\[0\\\]\"" \
> +  "eval variable pvla2_not_associated"
> +mi_list_array_varobj_children_with_index "pvla2_not_associated" "0" "1" \
> +    "real\\\(kind=4\\\)" "get children of pvla2_not_associated"
> +
> +
> +set bp_lineno [gdb_get_line_number "pvla2-associated"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 7 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "590-data-evaluate-expression pvla2" \
> +  "590\\^done,value=\"\\(\\( 2, 2, 2, 2, 2\\) \\( 2, 2, 2, 2, 2\\) \\)\"" \
> +  "evaluate associated vla"
> +
> +mi_create_varobj_checked pvla2_associated pvla2 \
> +  "real\\\(kind=4\\\) \\\(5,2\\\)" "create local variable pvla2_associated"
> +mi_gdb_test "591-var-info-type pvla2_associated" \
> +  "591\\^done,type=\"real\\\(kind=4\\\) \\\(5,2\\\)\"" \
> +  "info type variable pvla2_associated"
> +mi_gdb_test "592-var-show-format pvla2_associated" \
> +  "592\\^done,format=\"natural\"" \
> +  "show format variable pvla2_associated"
> +mi_gdb_test "593-var-evaluate-expression pvla2_associated" \
> +  "593\\^done,value=\"\\\[2\\\]\"" \
> +  "eval variable pvla2_associated"
> +
> +
> +set bp_lineno [gdb_get_line_number "pvla2-set-to-null"]
> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 8 "del" "vla" ".*vla.f90" \
> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
> +mi_run_cmd
> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
> +mi_gdb_test "600-data-evaluate-expression pvla2" \
> +  "600\\^done,value=\"<not associated>\"" "evaluate vla pointer set to null"
> +
> +mi_gdb_exit
> +return 0
> diff --git a/gdb/testsuite/gdb.mi/vla.f90 b/gdb/testsuite/gdb.mi/vla.f90
> new file mode 100644
> index 0000000..0b89d34
> --- /dev/null
> +++ b/gdb/testsuite/gdb.mi/vla.f90
> @@ -0,0 +1,42 @@
> +! Copyright 2015 Free Software Foundation, Inc.
> +!
> +! This program is free software; you can redistribute it and/or modify
> +! it under the terms of the GNU General Public License as published by
> +! the Free Software Foundation; either version 3 of the License, or
> +! (at your option) any later version.
> +!
> +! This program is distributed in the hope that it will be useful,
> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +! GNU General Public License for more details.
> +!
> +! You should have received a copy of the GNU General Public License
> +! along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +program vla
> +  real, allocatable :: vla1 (:)
> +  real, target, allocatable :: vla2(:, :)
> +  real, pointer :: pvla2 (:, :)
> +  logical :: l
> +
> +  allocate (vla1 (5))         ! vla1-not-allocated
> +  l = allocated(vla1)         ! vla1-allocated
> +
> +  vla1(:) = 1
> +  vla1(2) = 42                ! vla1-filled
> +  vla1(4) = 24
> +
> +  deallocate (vla1)           ! vla1-modified
> +  l = allocated(vla1)         ! vla1-deallocated
> +
> +  allocate (vla2 (5, 2))
> +  vla2(:, :) = 2
> +
> +  pvla2 => vla2               ! pvla2-not-associated
> +  l = associated(pvla2)       ! pvla2-associated
> +
> +  pvla2(2, 1) = 42
> +
> +  pvla2 => null()
> +  l = associated(pvla2)       ! pvla2-set-to-null
> +end program vla
> -- 
> 1.7.9.5
Keven Boell Aug. 5, 2015, 1:41 p.m. UTC | #2
On 21.07.2015 20:19, Joel Brobecker wrote:
> On Wed, Jul 01, 2015 at 02:42:12PM +0200, Keven Boell wrote:
>> Add basic test coverage for most dynamic array use-cases
>> in Fortran.
>> The commit contains the following tests:
>>   * Ensure that values of Fortran dynamic arrays
>>     can be evaluated correctly in various ways and states.
>>   * Ensure that Fortran primitives can be evaluated
>>     correctly when used as a dynamic array.
>>   * Dynamic arrays passed to subroutines and handled
>>     in different ways inside the routine.
>>   * Ensure that the ptype of dynamic arrays in
>>     Fortran can be printed in GDB correctly.
>>   * Ensure that dynamic arrays in different states
>>     (allocated/associated) can be evaluated.
>>   * Dynamic arrays passed to functions and returned from
>>     functions.
>>   * History values of dynamic arrays can be accessed and
>>     printed again with the correct values.
>>   * Dynamic array evaluations using MI protocol.
>>   * Sizeof output of dynamic arrays in various states.
>>
>> 2015-03-13  Keven Boell  <keven.boell@intel.com>
>>             Sanimir Agovic  <sanimir.agovic@intel.com>
>>
>> testsuite/gdb.fortran:
>>
>> 	* vla-alloc-assoc.exp: New file.
>> 	* vla-datatypes.exp: New file.
>> 	* vla-datatypes.f90: New file.
>> 	* vla-history.exp: New file.
>> 	* vla-ptype-sub.exp: New file.
>> 	* vla-ptype.exp: New file.
>> 	* vla-sizeof.exp: New file.
>> 	* vla-sub.f90: New file.
>> 	* vla-value-sub-arbitrary.exp: New file.
>> 	* vla-value-sub-finish.exp: New file.
>> 	* vla-value-sub.exp: New file.
>> 	* vla-value.exp: New file.
>> 	* vla-ptr-info.exp: New file.
>> 	* vla.f90: New file.
>>
>> testsuite/gdb.mi:
>>
>> 	* mi-vla-fortran.exp: New file.
>> 	* vla.f90: New file.
> 
> I only quickly scanned this patch, as it's really huge (huge
> is good, in this case).
> 
> One general comment is that we avoid re-using the same code
> for each test. See: https://sourceware.org/gdb/wiki/GDBTestcaseCookbook#Make_sure_test_executables_are_unique
> 
> Even if all testcases end up using the same code, I suggest
> making one source file for each testcase, and naming the source
> file the same as the .exp files (modulo the extension, of course).
> That's a fairly standard practice that makes it easier to associate
> testcase and code.
> 

The chapter you refered to on the Testcase Cookbook page says
the opposite:
"[...] but if for some reason a new test reuses the sources of
another existing test, the new test shall compile to its own
executable [...]"
This is exactly what I'm doing here.  I would like to avoid
code duplications as much as possible.

> 
>> ---
>>  gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp      |   65 +++++++
>>  gdb/testsuite/gdb.fortran/vla-datatypes.exp        |   82 +++++++++
>>  gdb/testsuite/gdb.fortran/vla-datatypes.f90        |   51 ++++++
>>  gdb/testsuite/gdb.fortran/vla-history.exp          |   62 +++++++
>>  gdb/testsuite/gdb.fortran/vla-ptr-info.exp         |   32 ++++
>>  gdb/testsuite/gdb.fortran/vla-ptype-sub.exp        |   87 ++++++++++
>>  gdb/testsuite/gdb.fortran/vla-ptype.exp            |   96 +++++++++++
>>  gdb/testsuite/gdb.fortran/vla-sizeof.exp           |   46 +++++
>>  gdb/testsuite/gdb.fortran/vla-sub.f90              |   82 +++++++++
>>  .../gdb.fortran/vla-value-sub-arbitrary.exp        |   35 ++++
>>  gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp |   49 ++++++
>>  gdb/testsuite/gdb.fortran/vla-value-sub.exp        |   90 ++++++++++
>>  gdb/testsuite/gdb.fortran/vla-value.exp            |  148 ++++++++++++++++
>>  gdb/testsuite/gdb.fortran/vla.f90                  |   56 ++++++
>>  gdb/testsuite/gdb.mi/mi-vla-fortran.exp            |  182 ++++++++++++++++++++
>>  gdb/testsuite/gdb.mi/vla.f90                       |   42 +++++
>>  16 files changed, 1205 insertions(+)
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-datatypes.f90
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-history.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptr-info.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-ptype.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-sizeof.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-sub.f90
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value-sub.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla-value.exp
>>  create mode 100644 gdb/testsuite/gdb.fortran/vla.f90
>>  create mode 100644 gdb/testsuite/gdb.mi/mi-vla-fortran.exp
>>  create mode 100644 gdb/testsuite/gdb.mi/vla.f90
>>
>> diff --git a/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
>> new file mode 100644
>> index 0000000..542b65c
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
>> @@ -0,0 +1,65 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Let's try to standardize a bit on how we write testcases. We have
> a "cookbook" for testcases at...
> 
>     https://sourceware.org/gdb/wiki/GDBTestcaseCookbook
> 
> ... and it shows how to handle runto failures:
> 
>    untested "could not run to main"
>    return -1
> 
> 

Done.

> 
>> +
>> +# Check the association status of various types of VLA's
>> +# and pointer to VLA's.
>> +gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
>> +gdb_continue_to_breakpoint "vla1-allocated"
>> +gdb_test "print l" " = \\.TRUE\\." \
>> +  "print vla1 allocation status (allocated)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "print l" " = \\.TRUE\\." \
>> +  "print vla2 allocation status (allocated)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test "print l" " = \\.TRUE\\." \
>> +  "print pvla associated status (associated)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
>> +gdb_continue_to_breakpoint "pvla-re-associated"
>> +gdb_test "print l" " = \\.TRUE\\." \
>> +  "print pvla associated status (re-associated)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
>> +gdb_continue_to_breakpoint "pvla-deassociated"
>> +gdb_test "print l" " = \\.FALSE\\." \
>> +  "print pvla allocation status (deassociated)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
>> +gdb_continue_to_breakpoint "vla1-deallocated"
>> +gdb_test "print l" " = \\.FALSE\\." \
>> +  "print vla1 allocation status (deallocated)"
>> +gdb_test "print vla1" " = <not allocated>" \
>> +  "print deallocated vla1"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
>> +gdb_continue_to_breakpoint "vla2-deallocated"
>> +gdb_test "print l" " = \\.FALSE\\." "print vla2 deallocated"
>> +gdb_test "print vla2" " = <not allocated>" "print deallocated vla2"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.exp b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
>> new file mode 100644
>> index 0000000..a61cb70
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
>> @@ -0,0 +1,82 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile ".f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +# check that all fortran standard datatypes will be
>> +# handled correctly when using as VLA's
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same as above.

Done.

> 
>> +
>> +gdb_breakpoint [gdb_get_line_number "vlas-allocated"]
>> +gdb_continue_to_breakpoint "vlas-allocated"
>> +gdb_test "next" " = allocated\\\(realvla\\\)" \
>> +  "next to allocation status of intvla"
>> +gdb_test "print l" " = \\.TRUE\\." "intvla allocated"
>> +gdb_test "next" " = allocated\\\(complexvla\\\)" \
>> +  "next to allocation status of realvla"
>> +gdb_test "print l" " = \\.TRUE\\." "realvla allocated"
>> +gdb_test "next" " = allocated\\\(logicalvla\\\)" \
>> +  "next to allocation status of complexvla"
>> +gdb_test "print l" " = \\.TRUE\\." "complexvla allocated"
>> +gdb_test "next" " = allocated\\\(charactervla\\\)" \
>> +  "next to allocation status of logicalvla"
>> +gdb_test "print l" " = \\.TRUE\\." "logicalvla allocated"
>> +gdb_test "next" "intvla\\\(:,:,:\\\) = 1" \
>> +  "next to allocation status of charactervla"
>> +gdb_test "print l" " = \\.TRUE\\." "charactervla allocated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vlas-initialized"]
>> +gdb_continue_to_breakpoint "vlas-initialized"
>> +gdb_test "ptype intvla" "type = integer\\\(kind=4\\\) \\\(11,22,33\\\)" \
>> +  "ptype intvla"
>> +gdb_test "ptype realvla" "type = real\\\(kind=4\\\) \\\(11,22,33\\\)" \
>> +  "ptype realvla"
>> +gdb_test "ptype complexvla" "type = complex\\\(kind=4\\\) \\\(11,22,33\\\)" \
>> +  "ptype complexvla"
>> +gdb_test "ptype logicalvla" "type = logical\\\(kind=4\\\) \\\(11,22,33\\\)" \
>> +  "ptype logicalvla"
>> +gdb_test "ptype charactervla" "type = character\\\*1 \\\(11,22,33\\\)" \
>> +  "ptype charactervla"
>> +
>> +gdb_test "print intvla(5,5,5)" " = 1" "print intvla(5,5,5) (1st)"
>> +gdb_test "print realvla(5,5,5)" " = 3.14\\d+" \
>> +  "print realvla(5,5,5) (1st)"
>> +gdb_test "print complexvla(5,5,5)" " = \\\(2,-3\\\)" \
>> +  "print complexvla(5,5,5) (1st)"
>> +gdb_test "print logicalvla(5,5,5)" " = \\.TRUE\\." \
>> +  "print logicalvla(5,5,5) (1st)"
>> +gdb_test "print charactervla(5,5,5)" " = 'K'" \
>> +  "print charactervla(5,5,5) (1st)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vlas-modified"]
>> +gdb_continue_to_breakpoint "vlas-modified"
>> +gdb_test "print intvla(5,5,5)" " = 42" "print intvla(5,5,5) (2nd)"
>> +gdb_test "print realvla(5,5,5)" " = 4.13\\d+" \
>> +  "print realvla(5,5,5) (2nd)"
>> +gdb_test "print complexvla(5,5,5)" " = \\\(-3,2\\\)" \
>> +  "print complexvla(5,5,5) (2nd)"
>> +gdb_test "print logicalvla(5,5,5)" " = \\.FALSE\\." \
>> +  "print logicalvla(5,5,5) (2nd)"
>> +gdb_test "print charactervla(5,5,5)" " = 'X'" \
>> +  "print charactervla(5,5,5) (2nd)"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.f90 b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
>> new file mode 100644
>> index 0000000..db25695
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
>> @@ -0,0 +1,51 @@
>> +! Copyright 2015 Free Software Foundation, Inc.
>> +!
>> +! This program is free software; you can redistribute it and/or modify
>> +! it under the terms of the GNU General Public License as published by
>> +! the Free Software Foundation; either version 2 of the License, or
>> +! (at your option) any later version.
>> +!
>> +! This program is distributed in the hope that it will be useful,
>> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +! GNU General Public License for more details.
>> +!
>> +! You should have received a copy of the GNU General Public License
>> +! along with this program; if not, write to the Free Software
>> +! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>> +
>> +program vla_primitives
>> +  integer, allocatable    :: intvla(:, :, :)
>> +  real, allocatable       :: realvla(:, :, :)
>> +  complex, allocatable    :: complexvla(:, :, :)
>> +  logical, allocatable    :: logicalvla(:, :, :)
>> +  character, allocatable  :: charactervla(:, :, :)
>> +  logical                 :: l
>> +
>> +  allocate (intvla (11,22,33))
>> +  allocate (realvla (11,22,33))
>> +  allocate (complexvla (11,22,33))
>> +  allocate (logicalvla (11,22,33))
>> +  allocate (charactervla (11,22,33))
>> +
>> +  l = allocated(intvla)                   ! vlas-allocated
>> +  l = allocated(realvla)
>> +  l = allocated(complexvla)
>> +  l = allocated(logicalvla)
>> +  l = allocated(charactervla)
>> +
>> +  intvla(:,:,:) = 1
>> +  realvla(:,:,:) = 3.14
>> +  complexvla(:,:,:) = cmplx(2.0,-3.0)
>> +  logicalvla(:,:,:) = .TRUE.
>> +  charactervla(:,:,:) = char(75)
>> +
>> +  intvla(5,5,5) = 42                      ! vlas-initialized
>> +  realvla(5,5,5) = 4.13
>> +  complexvla(5,5,5) = cmplx(-3.0,2.0)
>> +  logicalvla(5,5,5) = .FALSE.
>> +  charactervla(5,5,5) = 'X'
>> +
>> +  ! dummy statement for bp
>> +  l = .FALSE.                             ! vlas-modified
>> +end program vla_primitives
>> diff --git a/gdb/testsuite/gdb.fortran/vla-history.exp b/gdb/testsuite/gdb.fortran/vla-history.exp
>> new file mode 100644
>> index 0000000..d56519c
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-history.exp
>> @@ -0,0 +1,62 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same as above.

Done.

> 
>> +
>> +# Set some breakpoints and print complete vla.
>> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
>> +gdb_continue_to_breakpoint "vla1-init"
>> +gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "print vla1" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
>> +  "print vla1 allocated"
>> +gdb_test "print vla2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
>> +  "print vla2 allocated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
>> +gdb_continue_to_breakpoint "vla1-filled"
>> +gdb_test "print vla1" \
>> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
>> +  "print vla1 filled"
>> +
>> +# Try to access history values for full vla prints.
>> +gdb_test "print \$1" " = <not allocated>" "print \$1"
>> +gdb_test "print \$2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
>> +  "print \$2"
>> +gdb_test "print \$3" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
>> +  "print \$3"
>> +gdb_test "print \$4" \
>> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" "print \$4"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-filled"]
>> +gdb_continue_to_breakpoint "vla2-filled"
>> +gdb_test "print vla2(1,43,20)" " = 1311" "print vla2(1,43,20)"
>> +gdb_test "print vla1(1,3,8)" " = 1001" "print vla2(1,3,8)"
>> +
>> +# Try to access history values for vla values.
>> +gdb_test "print \$9" " = 1311" "print \$9"
>> +gdb_test "print \$10" " = 1001" "print \$10"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-ptr-info.exp b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
>> new file mode 100644
>> index 0000000..b2d8f00
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
>> @@ -0,0 +1,32 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
> 
> Same remark as above.

Done.

> 
>> +}
>> +
>> +# Check the status of a pointer to a dynamic array.
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\)\\)\\) ${hex}" \
>> +  "print pvla pointer information"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
>> new file mode 100644
>> index 0000000..98fd663
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
>> @@ -0,0 +1,87 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla-sub.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same as above.

Done.

> 
>> +
>> +# Pass fixed array to function and handle them as vla in function.
>> +gdb_breakpoint [gdb_get_line_number "not-filled"]
>> +gdb_continue_to_breakpoint "not-filled (1st)"
>> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(42,42\\\)" \
>> +  "ptype array1 (passed fixed)"
>> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(42,42,42\\\)" \
>> +  "ptype array2 (passed fixed)"
>> +gdb_test "ptype array1(40, 10)" "type = integer\\\(kind=4\\\)" \
>> +  "ptype array1(40, 10) (passed fixed)"
>> +gdb_test "ptype array2(13, 11, 5)" "type = real\\\(kind=4\\\)" \
>> +  "ptype array2(13, 11, 5) (passed fixed)"
>> +
>> +# Pass sub arrays to function and handle them as vla in function.
>> +gdb_continue_to_breakpoint "not-filled (2nd)"
>> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(6,6\\\)" \
>> +  "ptype array1 (passed sub-array)"
>> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(6,6,6\\\)" \
>> +  "ptype array2 (passed sub-array)"
>> +gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
>> +  "ptype array1(3, 3) (passed sub-array)"
>> +gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
>> +  "ptype array2(4, 4, 4) (passed sub-array)"
>> +
>> +# Check ptype outside of bounds. This should not crash GDB.
> 
> Missing second space after a period.

Done.

> 
>> +gdb_test "ptype array1(100, 100)" "no such vector element" \
>> +  "ptype array1(100, 100) subarray do not crash (passed sub-array)"
>> +gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
>> +  "ptype array2(100, 100, 100) subarray do not crash (passed sub-array)"
>> +
>> +# Pass vla to function.
>> +gdb_continue_to_breakpoint "not-filled (3rd)"
>> +gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(20,20\\\)" \
>> +  "ptype array1 (passed vla)"
>> +gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
>> +  "ptype array2 (passed vla)"
>> +gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
>> +  "ptype array1(3, 3) (passed vla)"
>> +gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
>> +  "ptype array2(4, 4, 4) (passed vla)"
>> +
>> +# Check ptype outside of bounds. This should not crash GDB.
> 
> Same here.

Done.

> 
>> +gdb_test "ptype array1(100, 100)" "no such vector element" \
>> +  "ptype array1(100, 100) VLA do not crash (passed vla)"
>> +gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
>> +  "ptype array2(100, 100, 100) VLA do not crash (passed vla)"
>> +
>> +# Pass fixed array to function and handle it as VLA of arbitrary length in
>> +# function.
>> +gdb_breakpoint [gdb_get_line_number "end-of-bar"]
>> +gdb_continue_to_breakpoint "end-of-bar"
>> +gdb_test "ptype array1" \
>> +  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(\\*\\)\\)?" \
>> +  "ptype array1 (arbitrary length)"
>> +gdb_test "ptype array2" \
>> +  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(4:9,10:\\*\\)\\)?" \
>> +  "ptype array2 (arbitrary length)"
>> +gdb_test "ptype array1(100)" "type = integer\\\(kind=4\\\)" \
>> +  "ptype array1(100) (arbitrary length)"
>> +gdb_test "ptype array2(4,100)" "type = integer\\\(kind=4\\\)" \
>> +  "ptype array2(4,100) (arbitrary length)"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-ptype.exp b/gdb/testsuite/gdb.fortran/vla-ptype.exp
>> new file mode 100644
>> index 0000000..cd47bbe
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-ptype.exp
>> @@ -0,0 +1,96 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
> 
> Same remark as before.

Done.

> 
>> +}
>> +
>> +# Check the ptype of various VLA states and pointer to VLA's.
>> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
>> +gdb_continue_to_breakpoint "vla1-init"
>> +gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not initialized"
>> +gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not initialized"
>> +gdb_test "ptype pvla" "type = <not associated>" "ptype pvla not initialized"
>> +gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
>> +  "ptype vla1(3, 6, 9) not initialized"
>> +gdb_test "ptype vla2(5, 45, 20)" \
>> +  "no such vector element because not allocated" \
>> +  "ptype vla1(5, 45, 20) not initialized"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
>> +gdb_continue_to_breakpoint "vla1-allocated"
>> +gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
>> +  "ptype vla1 allocated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
>> +  "ptype vla2 allocated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
>> +gdb_continue_to_breakpoint "vla1-filled"
>> +gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
>> +  "ptype vla1 filled"
>> +gdb_test "ptype vla1(3, 6, 9)" "type = real\\\(kind=4\\\)" \
>> +  "ptype vla1(3, 6, 9)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-filled"]
>> +gdb_continue_to_breakpoint "vla2-filled"
>> +gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
>> +  "ptype vla2 filled"
>> +gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
>> +  "ptype vla1(5, 45, 20) filled"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
>> +  "ptype pvla associated"
>> +gdb_test "ptype pvla(3, 6, 9)" "type = real\\\(kind=4\\\)" \
>> +  "ptype pvla(3, 6, 9)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
>> +gdb_continue_to_breakpoint "pvla-re-associated"
>> +gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
>> +  "ptype pvla re-associated"
>> +gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
>> +  "ptype vla1(5, 45, 20) re-associated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
>> +gdb_continue_to_breakpoint "pvla-deassociated"
>> +gdb_test "ptype pvla" "type = <not associated>" "ptype pvla deassociated"
>> +gdb_test "ptype pvla(5, 45, 20)" \
>> +  "no such vector element because not associated" \
>> +  "ptype pvla(5, 45, 20) not associated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
>> +gdb_continue_to_breakpoint "vla1-deallocated"
>> +gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not allocated"
>> +gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
>> +  "ptype vla1(3, 6, 9) not allocated"
>> +
>> +gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
>> +gdb_continue_to_breakpoint "vla2-deallocated"
>> +gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not allocated"
>> +gdb_test "ptype vla2(5, 45, 20)" \
>> +  "no such vector element because not allocated" \
>> +  "ptype vla2(5, 45, 20) not allocated"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
>> new file mode 100644
>> index 0000000..8281425
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
>> @@ -0,0 +1,46 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
> 
> Same remark as before.

Done.

> 
>> +}
>> +
>> +# Try to access values in non allocated VLA
>> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
>> +gdb_continue_to_breakpoint "vla1-init"
>> +gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
>> +
>> +# Try to access value in allocated VLA
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "print sizeof(vla1)" " = 4000" "print sizeof allocated vla1"
>> +
>> +# Try to access values in undefined pointer to VLA (dangling)
>> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
>> +gdb_continue_to_breakpoint "vla1-filled"
>> +gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
>> +
>> +# Try to access values in pointer to VLA and compare them
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-sub.f90 b/gdb/testsuite/gdb.fortran/vla-sub.f90
>> new file mode 100644
>> index 0000000..dfda411
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-sub.f90
>> @@ -0,0 +1,82 @@
>> +! Copyright 2015 Free Software Foundation, Inc.
>> +!
>> +! This program is free software; you can redistribute it and/or modify
>> +! it under the terms of the GNU General Public License as published by
>> +! the Free Software Foundation; either version 2 of the License, or
>> +! (at your option) any later version.
>> +!
>> +! This program is distributed in the hope that it will be useful,
>> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +! GNU General Public License for more details.
>> +!
>> +! You should have received a copy of the GNU General Public License
>> +! along with this program; if not, write to the Free Software
>> +! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>> +!
>> +! Original file written by Jakub Jelinek <jakub@redhat.com> and
>> +! Jan Kratochvil <jan.kratochvil@redhat.com>.
>> +! Modified for the GDB testcases by Keven Boell <keven.boell@intel.com>.
>> +
>> +subroutine foo (array1, array2)
>> +  integer :: array1 (:, :)
>> +  real    :: array2 (:, :, :)
>> +
>> +  array1(:,:) = 5                       ! not-filled
>> +  array1(1, 1) = 30
>> +
>> +  array2(:,:,:) = 6                     ! array1-filled
>> +  array2(:,:,:) = 3
>> +  array2(1,1,1) = 30
>> +  array2(3,3,3) = 90                    ! array2-almost-filled
>> +end subroutine
>> +
>> +subroutine bar (array1, array2)
>> +  integer :: array1 (*)
>> +  integer :: array2 (4:9, 10:*)
>> +
>> +  array1(5:10) = 1311
>> +  array1(7) = 1
>> +  array1(100) = 100
>> +  array2(4,10) = array1(7)
>> +  array2(4,100) = array1(7)
>> +  return                                ! end-of-bar
>> +end subroutine
>> +
>> +program vla_sub
>> +  interface
>> +    subroutine foo (array1, array2)
>> +      integer :: array1 (:, :)
>> +      real :: array2 (:, :, :)
>> +    end subroutine
>> +  end interface
>> +  interface
>> +    subroutine bar (array1, array2)
>> +      integer :: array1 (*)
>> +      integer :: array2 (4:9, 10:*)
>> +    end subroutine
>> +  end interface
>> +
>> +  real, allocatable :: vla1 (:, :, :)
>> +  integer, allocatable :: vla2 (:, :)
>> +
>> +  ! used for subroutine
>> +  integer :: sub_arr1(42, 42)
>> +  real    :: sub_arr2(42, 42, 42)
>> +  integer :: sub_arr3(42)
>> +
>> +  sub_arr1(:,:) = 1                   ! vla2-deallocated
>> +  sub_arr2(:,:,:) = 2
>> +  sub_arr3(:) = 3
>> +
>> +  call foo(sub_arr1, sub_arr2)
>> +  call foo(sub_arr1(5:10, 5:10), sub_arr2(10:15,10:15,10:15))
>> +
>> +  allocate (vla1 (10,10,10))
>> +  allocate (vla2 (20,20))
>> +  vla1(:,:,:) = 1311
>> +  vla2(:,:) = 42
>> +  call foo(vla2, vla1)
>> +
>> +  call bar(sub_arr3, sub_arr1)
>> +end program vla_sub
>> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
>> new file mode 100644
>> index 0000000..88defda
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
>> @@ -0,0 +1,35 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla-sub.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
> 
> Same remark as before.

Done.

> 
>> +}
>> +
>> +# Check VLA with arbitary length and check that elements outside of
>> +# bounds of the passed VLA can be accessed correctly.
>> +gdb_breakpoint [gdb_get_line_number "end-of-bar"]
>> +gdb_continue_to_breakpoint "end-of-bar"
>> +gdb_test "p array1(42)" " = 3" "print arbitary array1(42)"
>> +gdb_test "p array1(100)" " = 100" "print arbitary array1(100)"
>> +gdb_test "p array2(4,10)" " = 1" "print arbitary array2(4,10)"
>> +gdb_test "p array2(4,100)" " = 1" "print arbitary array2(4,100)"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
>> new file mode 100644
>> index 0000000..6738875
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
>> @@ -0,0 +1,49 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla-sub.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same Remark as before.

Done.

> 
>> +
>> +# "up" works with GCC but other Fortran compilers may copy the values into the
>> +# outer function only on the exit of the inner function.
>> +# We need both variants as depending on the arch we optionally may still be
>> +# executing the caller line or not after `finish'.
>> +
>> +gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
>> +gdb_continue_to_breakpoint "array2-almost-filled"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was filled"
>> +gdb_test "print array2(2,1,1)=20" " = 20" \
>> +  "set array(2,2,2) to 20 in subroutine"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was mofified in debugger"
>> +
>> +gdb_test "finish" \
>> +  ".*(foo\\\(sub_arr1\\\(5:10, 5:10\\\), sub_arr2\\\(10:15,10:15,10:15\\\)\\\)|foo \\\(array1=..., array2=...\\\).*)" \
>> +  "finish function"
>> +gdb_test "p sub_arr1(5, 7)" " = 5" "sub_arr1(5, 7) after finish"
>> +gdb_test "p sub_arr1(1, 1)" " = 30" "sub_arr1(1, 1) after finish"
>> +gdb_test "p sub_arr2(1, 1, 1)" " = 30" "sub_arr2(1, 1, 1) after finish"
>> +gdb_test "p sub_arr2(2, 1, 1)" " = 20" "sub_arr2(2, 1, 1) after finish"
>> +
>> diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub.exp b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
>> new file mode 100644
>> index 0000000..de88333
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
>> @@ -0,0 +1,90 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla-sub.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +    {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same remark as before.

Done.

> 
>> +
>> +# Check the values of VLA's in subroutine can be evaluated correctly
>> +
>> +# Try to access values from a fixed array handled as VLA in subroutine.
>> +gdb_breakpoint [gdb_get_line_number "not-filled"]
>> +gdb_continue_to_breakpoint "not-filled (1st)"
>> +gdb_test "print array1" " = \\(\[()1, .\]*\\)" \
>> +  "print passed array1 in foo (passed fixed array)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "array1-filled"]
>> +gdb_continue_to_breakpoint "array1-filled (1st)"
>> +gdb_test "print array1(5, 7)" " = 5" \
>> +  "print array1(5, 7) after filled in foo (passed fixed array)"
>> +gdb_test "print array1(1, 1)" " = 30" \
>> +  "print array1(1, 1) after filled in foo (passed fixed array)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
>> +gdb_continue_to_breakpoint "array2-almost-filled (1st)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was filled (passed fixed array)"
>> +gdb_test "print array2(2,1,1)=20" " = 20" \
>> +  "set array(2,2,2) to 20 in subroutine (passed fixed array)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was mofified in debugger (passed fixed array)"
>> +
>> +
>> +# Try to access values from a fixed sub-array handled as VLA in subroutine.
>> +gdb_continue_to_breakpoint "not-filled (2nd)"
>> +gdb_test "print array1" " = \\(\[()5, .\]*\\)" \
>> +  "print passed array1 in foo (passed sub-array)"
>> +
>> +gdb_continue_to_breakpoint "array1-filled (2nd)"
>> +gdb_test "print array1(5, 5)" " = 5" \
>> +  "print array1(5, 5) after filled in foo (passed sub-array)"
>> +gdb_test "print array1(1, 1)" " = 30" \
>> +  "print array1(1, 1) after filled in foo (passed sub-array)"
>> +
>> +gdb_continue_to_breakpoint "array2-almost-filled (2nd)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was filled (passed sub-array)"
>> +gdb_test "print array2(2,1,1)=20" " = 20" \
>> +  "set array(2,2,2) to 20 in subroutine (passed sub-array)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was mofified in debugger (passed sub-array)"
>> +
>> +
>> +# Try to access values from a VLA passed to subroutine.
>> +gdb_continue_to_breakpoint "not-filled (3rd)"
>> +gdb_test "print array1" " = \\(\[()42, .\]*\\)" \
>> +  "print passed array1 in foo (passed vla)"
>> +
>> +gdb_continue_to_breakpoint "array1-filled (3rd)"
>> +gdb_test "print array1(5, 5)" " = 5" \
>> +  "print array1(5, 5) after filled in foo (passed vla)"
>> +gdb_test "print array1(1, 1)" " = 30" \
>> +  "print array1(1, 1) after filled in foo (passed vla)"
>> +
>> +gdb_continue_to_breakpoint "array2-almost-filled (3rd)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was filled (passed vla)"
>> +gdb_test "print array2(2,1,1)=20" " = 20" \
>> +  "set array(2,2,2) to 20 in subroutine (passed vla)"
>> +gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
>> +  "print array2 in foo after it was mofified in debugger (passed vla)"
>> diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran/vla-value.exp
>> new file mode 100644
>> index 0000000..6ea1eff
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla-value.exp
>> @@ -0,0 +1,148 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +standard_testfile "vla.f90"
>> +
>> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
>> +     {debug f90 quiet}] } {
>> +    return -1
>> +}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
> 
> Same remark as before.

Done.

> 
>> +
>> +# Try to access values in non allocated VLA
>> +gdb_breakpoint [gdb_get_line_number "vla1-init"]
>> +gdb_continue_to_breakpoint "vla1-init"
>> +gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
>> +gdb_test "print &vla1" \
>> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not allocated>\\\)\\\)\\\) $hex" \
>> +  "print non-allocated &vla1"
>> +gdb_test "print vla1(1,1,1)" "no such vector element because not allocated" \
>> +  "print member in non-allocated vla1 (1)"
>> +gdb_test "print vla1(101,202,303)" \
>> +  "no such vector element because not allocated" \
>> +  "print member in non-allocated vla1 (2)"
>> +gdb_test "print vla1(5,2,18)=1" "no such vector element because not allocated" \
>> +  "set member in non-allocated vla1"
>> +
>> +# Try to access value in allocated VLA
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "next" "\\d+(\\t|\\s)+vla1\\\(3, 6, 9\\\) = 42" \
>> +  "step over value assignment of vla1"
>> +gdb_test "print &vla1" \
>> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
>> +  "print allocated &vla1"
>> +gdb_test "print vla1(3, 6, 9)" " = 1311" "print allocated vla1(3,6,9)"
>> +gdb_test "print vla1(1, 3, 8)" " = 1311" "print allocated vla1(1,3,8)"
>> +gdb_test "print vla1(9, 9, 9) = 999" " = 999" \
>> +  "print allocated vla1(9,9,9)=1"
>> +
>> +# Try to access values in allocated VLA after specific assignment
>> +gdb_breakpoint [gdb_get_line_number "vla1-filled"]
>> +gdb_continue_to_breakpoint "vla1-filled"
>> +gdb_test "print vla1(3, 6, 9)" " = 42" \
>> +  "print allocated vla1(3,6,9) after specific assignment (filled)"
>> +gdb_test "print vla1(1, 3, 8)" " = 1001" \
>> +  "print allocated vla1(1,3,8) after specific assignment (filled)"
>> +gdb_test "print vla1(9, 9, 9)" " = 999" \
>> +  "print allocated vla1(9,9,9) after assignment in debugger (filled)"
>> +
>> +# Try to access values in undefined pointer to VLA (dangling)
>> +gdb_test "print pvla" " = <not associated>" "print undefined pvla"
>> +gdb_test "print &pvla" \
>> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not associated>\\\)\\\)\\\) $hex" \
>> +  "print non-associated &pvla"
>> +gdb_test "print pvla(1, 3, 8)" "no such vector element because not associated" \
>> +  "print undefined pvla(1,3,8)"
>> +
>> +# Try to access values in pointer to VLA and compare them
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test "print &pvla" \
>> +  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
>> +  "print associated &pvla"
>> +gdb_test "print pvla(3, 6, 9)" " = 42" "print associated pvla(3,6,9)"
>> +gdb_test "print pvla(1, 3, 8)" " = 1001" "print associated pvla(1,3,8)"
>> +gdb_test "print pvla(9, 9, 9)" " = 999" "print associated pvla(9,9,9)"
>> +
>> +# Fill values to VLA using pointer and check
>> +gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
>> +gdb_continue_to_breakpoint "pvla-re-associated"
>> +gdb_test "print pvla(5, 45, 20)" \
>> +  " = 1" "print pvla(5, 45, 20) after filled using pointer"
>> +gdb_test "print vla2(5, 45, 20)" \
>> +  " = 1" "print vla2(5, 45, 20) after filled using pointer"
>> +gdb_test "print pvla(7, 45, 14)" " = 2" \
>> +  "print pvla(7, 45, 14) after filled using pointer"
>> +gdb_test "print vla2(7, 45, 14)" " = 2" \
>> +  "print vla2(7, 45, 14) after filled using pointer"
>> +
>> +# Try to access values of deassociated VLA pointer
>> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
>> +gdb_continue_to_breakpoint "pvla-deassociated"
>> +gdb_test "print pvla(5, 45, 20)" \
>> +  "no such vector element because not associated" \
>> +  "print pvla(5, 45, 20) after deassociated"
>> +gdb_test "print pvla(7, 45, 14)" \
>> +  "no such vector element because not associated" \
>> +  "print pvla(7, 45, 14) after dissasociated"
>> +gdb_test "print pvla" " = <not associated>" \
>> +  "print vla1 after deassociated"
>> +
>> +# Try to access values of deallocated VLA
>> +gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
>> +gdb_continue_to_breakpoint "vla1-deallocated"
>> +gdb_test "print vla1(3, 6, 9)" "no such vector element because not allocated" \
>> +  "print allocated vla1(3,6,9) after specific assignment (deallocated)"
>> +gdb_test "print vla1(1, 3, 8)" "no such vector element because not allocated" \
>> +  "print allocated vla1(1,3,8) after specific assignment (deallocated)"
>> +gdb_test "print vla1(9, 9, 9)" "no such vector element because not allocated" \
>> +  "print allocated vla1(9,9,9) after assignment in debugger (deallocated)"
>> +
>> +
>> +# Try to assign VLA to user variable
>> +clean_restart ${testfile}
>> +
>> +if ![runto MAIN__] then {
>> +    perror "couldn't run to breakpoint MAIN__"
>> +    continue
>> +}
>> +gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
>> +gdb_continue_to_breakpoint "vla2-allocated"
>> +gdb_test "next" "\\d+.*vla1\\(3, 6, 9\\) = 42" "next (1)"
>> +
>> +gdb_test_no_output "set \$myvar = vla1" "set \$myvar = vla1"
>> +gdb_test "print \$myvar" \
>> +  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
>> +  "print \$myvar set to vla1"
>> +
>> +gdb_test "next" "\\d+.*vla1\\(1, 3, 8\\) = 1001" "next (2)"
>> +gdb_test "print \$myvar(3,6,9)" " = 1311" "print \$myvar(3,6,9)"
>> +
>> +gdb_breakpoint [gdb_get_line_number "pvla-associated"]
>> +gdb_continue_to_breakpoint "pvla-associated"
>> +gdb_test_no_output "set \$mypvar = pvla" "set \$mypvar = pvla"
>> +gdb_test "print \$mypvar(1,3,8)" " = 1001" "print \$mypvar(1,3,8)"
>> +
>> +# deallocate pointer and make sure user defined variable still has the
>> +# right value.
>> +gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
>> +gdb_continue_to_breakpoint "pvla-deassociated"
>> +gdb_test "print \$mypvar(1,3,8)" " = 1001" \
>> +  "print \$mypvar(1,3,8) after deallocated"
>> diff --git a/gdb/testsuite/gdb.fortran/vla.f90 b/gdb/testsuite/gdb.fortran/vla.f90
>> new file mode 100644
>> index 0000000..61e22b9
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.fortran/vla.f90
>> @@ -0,0 +1,56 @@
>> +! Copyright 2015 Free Software Foundation, Inc.
>> +!
>> +! This program is free software; you can redistribute it and/or modify
>> +! it under the terms of the GNU General Public License as published by
>> +! the Free Software Foundation; either version 3 of the License, or
>> +! (at your option) any later version.
>> +!
>> +! This program is distributed in the hope that it will be useful,
>> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +! GNU General Public License for more details.
>> +!
>> +! You should have received a copy of the GNU General Public License
>> +! along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +program vla
>> +  real, target, allocatable :: vla1 (:, :, :)
>> +  real, target, allocatable :: vla2 (:, :, :)
>> +  real, target, allocatable :: vla3 (:, :)
>> +  real, pointer :: pvla (:, :, :)
>> +  logical :: l
>> +
>> +  allocate (vla1 (10,10,10))          ! vla1-init
>> +  l = allocated(vla1)
>> +
>> +  allocate (vla2 (1:7,42:50,13:35))   ! vla1-allocated
>> +  l = allocated(vla2)
>> +
>> +  vla1(:, :, :) = 1311                ! vla2-allocated
>> +  vla1(3, 6, 9) = 42
>> +  vla1(1, 3, 8) = 1001
>> +  vla1(6, 2, 7) = 13
>> +
>> +  vla2(:, :, :) = 1311                ! vla1-filled
>> +  vla2(5, 45, 20) = 42
>> +
>> +  pvla => vla1                        ! vla2-filled
>> +  l = associated(pvla)
>> +
>> +  pvla => vla2                        ! pvla-associated
>> +  l = associated(pvla)
>> +  pvla(5, 45, 20) = 1
>> +  pvla(7, 45, 14) = 2
>> +
>> +  pvla => null()                      ! pvla-re-associated
>> +  l = associated(pvla)
>> +
>> +  deallocate (vla1)                   ! pvla-deassociated
>> +  l = allocated(vla1)
>> +
>> +  deallocate (vla2)                   ! vla1-deallocated
>> +  l = allocated(vla2)
>> +
>> +  allocate (vla3 (2,2))               ! vla2-deallocated
>> +  vla3(:,:) = 13
>> +end program vla
>> diff --git a/gdb/testsuite/gdb.mi/mi-vla-fortran.exp b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
>> new file mode 100644
>> index 0000000..d191623
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
>> @@ -0,0 +1,182 @@
>> +# Copyright 2015 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +# Verify that, using the MI, we can evaluate a simple C Variable Length
>> +# Array (VLA).
>> +
>> +load_lib mi-support.exp
>> +set MIFLAGS "-i=mi"
>> +
>> +gdb_exit
>> +if [mi_gdb_start] {
>> +    continue
>> +}
>> +
>> +standard_testfile vla.f90
>> +
>> +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
>> +     {debug f90}] != "" } {
>> +     untested mi-vla-fortran.exp
>> +     return -1
>> +}
>> +
>> +mi_delete_breakpoints
>> +mi_gdb_reinitialize_dir $srcdir/$subdir
>> +mi_gdb_load ${binfile}
>> +
>> +set bp_lineno [gdb_get_line_number "vla1-not-allocated"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 1 "del" "vla" \
>> +  ".*vla.f90" $bp_lineno $hex \
>> +  "insert breakpoint at line $bp_lineno (vla not allocated)"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "500-data-evaluate-expression vla1" \
>> +  "500\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
>> +
>> +mi_create_varobj_checked vla1_not_allocated vla1 "<not allocated>" \
>> +  "create local variable vla1_not_allocated"
>> +mi_gdb_test "501-var-info-type vla1_not_allocated" \
>> +  "501\\^done,type=\"<not allocated>\"" \
>> +  "info type variable vla1_not_allocated"
>> +mi_gdb_test "502-var-show-format vla1_not_allocated" \
>> +  "502\\^done,format=\"natural\"" \
>> +  "show format variable vla1_not_allocated"
>> +mi_gdb_test "503-var-evaluate-expression vla1_not_allocated" \
>> +  "503\\^done,value=\"\\\[0\\\]\"" \
>> +  "eval variable vla1_not_allocated"
>> +mi_list_array_varobj_children_with_index "vla1_not_allocated" "0" "1" \
>> +    "real\\\(kind=4\\\)" "get children of vla1_not_allocated"
>> +
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "vla1-allocated"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 2 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno (vla allocated)"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "510-data-evaluate-expression vla1" \
>> +  "510\\^done,value=\"\\(0, 0, 0, 0, 0\\)\"" "evaluate allocated vla"
>> +
>> +mi_create_varobj_checked vla1_allocated vla1 "real\\\(kind=4\\\) \\\(5\\\)" \
>> +  "create local variable vla1_allocated"
>> +mi_gdb_test "511-var-info-type vla1_allocated" \
>> +  "511\\^done,type=\"real\\\(kind=4\\\) \\\(5\\\)\"" \
>> +  "info type variable vla1_allocated"
>> +mi_gdb_test "512-var-show-format vla1_allocated" \
>> +  "512\\^done,format=\"natural\"" \
>> +  "show format variable vla1_allocated"
>> +mi_gdb_test "513-var-evaluate-expression vla1_allocated" \
>> +  "513\\^done,value=\"\\\[5\\\]\"" \
>> +  "eval variable vla1_allocated"
>> +mi_list_array_varobj_children_with_index "vla1_allocated" "5" "1" \
>> +    "real\\\(kind=4\\\)" "get children of vla1_allocated"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "vla1-filled"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 3 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "520-data-evaluate-expression vla1" \
>> +  "520\\^done,value=\"\\(1, 1, 1, 1, 1\\)\"" "evaluate filled vla"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "vla1-modified"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 4 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "530-data-evaluate-expression vla1" \
>> +  "530\\^done,value=\"\\(1, 42, 1, 24, 1\\)\"" "evaluate filled vla"
>> +mi_gdb_test "540-data-evaluate-expression vla1(1)" \
>> +  "540\\^done,value=\"1\"" "evaluate filled vla"
>> +mi_gdb_test "550-data-evaluate-expression vla1(2)" \
>> +  "550\\^done,value=\"42\"" "evaluate filled vla"
>> +mi_gdb_test "560-data-evaluate-expression vla1(4)" \
>> +  "560\\^done,value=\"24\"" "evaluate filled vla"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "vla1-deallocated"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 5 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "570-data-evaluate-expression vla1" \
>> +  "570\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "pvla2-not-associated"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 6 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "580-data-evaluate-expression pvla2" \
>> +  "580\\^done,value=\"<not associated>\"" "evaluate not associated vla"
>> +
>> +mi_create_varobj_checked pvla2_not_associated pvla2 "<not associated>" \
>> +  "create local variable pvla2_not_associated"
>> +mi_gdb_test "581-var-info-type pvla2_not_associated" \
>> +  "581\\^done,type=\"<not associated>\"" \
>> +  "info type variable pvla2_not_associated"
>> +mi_gdb_test "582-var-show-format pvla2_not_associated" \
>> +  "582\\^done,format=\"natural\"" \
>> +  "show format variable pvla2_not_associated"
>> +mi_gdb_test "583-var-evaluate-expression pvla2_not_associated" \
>> +  "583\\^done,value=\"\\\[0\\\]\"" \
>> +  "eval variable pvla2_not_associated"
>> +mi_list_array_varobj_children_with_index "pvla2_not_associated" "0" "1" \
>> +    "real\\\(kind=4\\\)" "get children of pvla2_not_associated"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "pvla2-associated"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 7 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "590-data-evaluate-expression pvla2" \
>> +  "590\\^done,value=\"\\(\\( 2, 2, 2, 2, 2\\) \\( 2, 2, 2, 2, 2\\) \\)\"" \
>> +  "evaluate associated vla"
>> +
>> +mi_create_varobj_checked pvla2_associated pvla2 \
>> +  "real\\\(kind=4\\\) \\\(5,2\\\)" "create local variable pvla2_associated"
>> +mi_gdb_test "591-var-info-type pvla2_associated" \
>> +  "591\\^done,type=\"real\\\(kind=4\\\) \\\(5,2\\\)\"" \
>> +  "info type variable pvla2_associated"
>> +mi_gdb_test "592-var-show-format pvla2_associated" \
>> +  "592\\^done,format=\"natural\"" \
>> +  "show format variable pvla2_associated"
>> +mi_gdb_test "593-var-evaluate-expression pvla2_associated" \
>> +  "593\\^done,value=\"\\\[2\\\]\"" \
>> +  "eval variable pvla2_associated"
>> +
>> +
>> +set bp_lineno [gdb_get_line_number "pvla2-set-to-null"]
>> +mi_create_breakpoint "-t vla.f90:$bp_lineno" 8 "del" "vla" ".*vla.f90" \
>> +  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
>> +mi_run_cmd
>> +mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
>> +  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
>> +mi_gdb_test "600-data-evaluate-expression pvla2" \
>> +  "600\\^done,value=\"<not associated>\"" "evaluate vla pointer set to null"
>> +
>> +mi_gdb_exit
>> +return 0
>> diff --git a/gdb/testsuite/gdb.mi/vla.f90 b/gdb/testsuite/gdb.mi/vla.f90
>> new file mode 100644
>> index 0000000..0b89d34
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.mi/vla.f90
>> @@ -0,0 +1,42 @@
>> +! Copyright 2015 Free Software Foundation, Inc.
>> +!
>> +! This program is free software; you can redistribute it and/or modify
>> +! it under the terms of the GNU General Public License as published by
>> +! the Free Software Foundation; either version 3 of the License, or
>> +! (at your option) any later version.
>> +!
>> +! This program is distributed in the hope that it will be useful,
>> +! but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +! GNU General Public License for more details.
>> +!
>> +! You should have received a copy of the GNU General Public License
>> +! along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +program vla
>> +  real, allocatable :: vla1 (:)
>> +  real, target, allocatable :: vla2(:, :)
>> +  real, pointer :: pvla2 (:, :)
>> +  logical :: l
>> +
>> +  allocate (vla1 (5))         ! vla1-not-allocated
>> +  l = allocated(vla1)         ! vla1-allocated
>> +
>> +  vla1(:) = 1
>> +  vla1(2) = 42                ! vla1-filled
>> +  vla1(4) = 24
>> +
>> +  deallocate (vla1)           ! vla1-modified
>> +  l = allocated(vla1)         ! vla1-deallocated
>> +
>> +  allocate (vla2 (5, 2))
>> +  vla2(:, :) = 2
>> +
>> +  pvla2 => vla2               ! pvla2-not-associated
>> +  l = associated(pvla2)       ! pvla2-associated
>> +
>> +  pvla2(2, 1) = 42
>> +
>> +  pvla2 => null()
>> +  l = associated(pvla2)       ! pvla2-set-to-null
>> +end program vla
>> -- 
>> 1.7.9.5
> 

Thanks,
Keven
diff mbox

Patch

diff --git a/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
new file mode 100644
index 0000000..542b65c
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp
@@ -0,0 +1,65 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Check the association status of various types of VLA's
+# and pointer to VLA's.
+gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
+gdb_continue_to_breakpoint "vla1-allocated"
+gdb_test "print l" " = \\.TRUE\\." \
+  "print vla1 allocation status (allocated)"
+
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "print l" " = \\.TRUE\\." \
+  "print vla2 allocation status (allocated)"
+
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test "print l" " = \\.TRUE\\." \
+  "print pvla associated status (associated)"
+
+gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
+gdb_continue_to_breakpoint "pvla-re-associated"
+gdb_test "print l" " = \\.TRUE\\." \
+  "print pvla associated status (re-associated)"
+
+gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
+gdb_continue_to_breakpoint "pvla-deassociated"
+gdb_test "print l" " = \\.FALSE\\." \
+  "print pvla allocation status (deassociated)"
+
+gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
+gdb_continue_to_breakpoint "vla1-deallocated"
+gdb_test "print l" " = \\.FALSE\\." \
+  "print vla1 allocation status (deallocated)"
+gdb_test "print vla1" " = <not allocated>" \
+  "print deallocated vla1"
+
+gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
+gdb_continue_to_breakpoint "vla2-deallocated"
+gdb_test "print l" " = \\.FALSE\\." "print vla2 deallocated"
+gdb_test "print vla2" " = <not allocated>" "print deallocated vla2"
diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.exp b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
new file mode 100644
index 0000000..a61cb70
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-datatypes.exp
@@ -0,0 +1,82 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile ".f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+# check that all fortran standard datatypes will be
+# handled correctly when using as VLA's
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+gdb_breakpoint [gdb_get_line_number "vlas-allocated"]
+gdb_continue_to_breakpoint "vlas-allocated"
+gdb_test "next" " = allocated\\\(realvla\\\)" \
+  "next to allocation status of intvla"
+gdb_test "print l" " = \\.TRUE\\." "intvla allocated"
+gdb_test "next" " = allocated\\\(complexvla\\\)" \
+  "next to allocation status of realvla"
+gdb_test "print l" " = \\.TRUE\\." "realvla allocated"
+gdb_test "next" " = allocated\\\(logicalvla\\\)" \
+  "next to allocation status of complexvla"
+gdb_test "print l" " = \\.TRUE\\." "complexvla allocated"
+gdb_test "next" " = allocated\\\(charactervla\\\)" \
+  "next to allocation status of logicalvla"
+gdb_test "print l" " = \\.TRUE\\." "logicalvla allocated"
+gdb_test "next" "intvla\\\(:,:,:\\\) = 1" \
+  "next to allocation status of charactervla"
+gdb_test "print l" " = \\.TRUE\\." "charactervla allocated"
+
+gdb_breakpoint [gdb_get_line_number "vlas-initialized"]
+gdb_continue_to_breakpoint "vlas-initialized"
+gdb_test "ptype intvla" "type = integer\\\(kind=4\\\) \\\(11,22,33\\\)" \
+  "ptype intvla"
+gdb_test "ptype realvla" "type = real\\\(kind=4\\\) \\\(11,22,33\\\)" \
+  "ptype realvla"
+gdb_test "ptype complexvla" "type = complex\\\(kind=4\\\) \\\(11,22,33\\\)" \
+  "ptype complexvla"
+gdb_test "ptype logicalvla" "type = logical\\\(kind=4\\\) \\\(11,22,33\\\)" \
+  "ptype logicalvla"
+gdb_test "ptype charactervla" "type = character\\\*1 \\\(11,22,33\\\)" \
+  "ptype charactervla"
+
+gdb_test "print intvla(5,5,5)" " = 1" "print intvla(5,5,5) (1st)"
+gdb_test "print realvla(5,5,5)" " = 3.14\\d+" \
+  "print realvla(5,5,5) (1st)"
+gdb_test "print complexvla(5,5,5)" " = \\\(2,-3\\\)" \
+  "print complexvla(5,5,5) (1st)"
+gdb_test "print logicalvla(5,5,5)" " = \\.TRUE\\." \
+  "print logicalvla(5,5,5) (1st)"
+gdb_test "print charactervla(5,5,5)" " = 'K'" \
+  "print charactervla(5,5,5) (1st)"
+
+gdb_breakpoint [gdb_get_line_number "vlas-modified"]
+gdb_continue_to_breakpoint "vlas-modified"
+gdb_test "print intvla(5,5,5)" " = 42" "print intvla(5,5,5) (2nd)"
+gdb_test "print realvla(5,5,5)" " = 4.13\\d+" \
+  "print realvla(5,5,5) (2nd)"
+gdb_test "print complexvla(5,5,5)" " = \\\(-3,2\\\)" \
+  "print complexvla(5,5,5) (2nd)"
+gdb_test "print logicalvla(5,5,5)" " = \\.FALSE\\." \
+  "print logicalvla(5,5,5) (2nd)"
+gdb_test "print charactervla(5,5,5)" " = 'X'" \
+  "print charactervla(5,5,5) (2nd)"
diff --git a/gdb/testsuite/gdb.fortran/vla-datatypes.f90 b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
new file mode 100644
index 0000000..db25695
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-datatypes.f90
@@ -0,0 +1,51 @@ 
+! Copyright 2015 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+program vla_primitives
+  integer, allocatable    :: intvla(:, :, :)
+  real, allocatable       :: realvla(:, :, :)
+  complex, allocatable    :: complexvla(:, :, :)
+  logical, allocatable    :: logicalvla(:, :, :)
+  character, allocatable  :: charactervla(:, :, :)
+  logical                 :: l
+
+  allocate (intvla (11,22,33))
+  allocate (realvla (11,22,33))
+  allocate (complexvla (11,22,33))
+  allocate (logicalvla (11,22,33))
+  allocate (charactervla (11,22,33))
+
+  l = allocated(intvla)                   ! vlas-allocated
+  l = allocated(realvla)
+  l = allocated(complexvla)
+  l = allocated(logicalvla)
+  l = allocated(charactervla)
+
+  intvla(:,:,:) = 1
+  realvla(:,:,:) = 3.14
+  complexvla(:,:,:) = cmplx(2.0,-3.0)
+  logicalvla(:,:,:) = .TRUE.
+  charactervla(:,:,:) = char(75)
+
+  intvla(5,5,5) = 42                      ! vlas-initialized
+  realvla(5,5,5) = 4.13
+  complexvla(5,5,5) = cmplx(-3.0,2.0)
+  logicalvla(5,5,5) = .FALSE.
+  charactervla(5,5,5) = 'X'
+
+  ! dummy statement for bp
+  l = .FALSE.                             ! vlas-modified
+end program vla_primitives
diff --git a/gdb/testsuite/gdb.fortran/vla-history.exp b/gdb/testsuite/gdb.fortran/vla-history.exp
new file mode 100644
index 0000000..d56519c
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-history.exp
@@ -0,0 +1,62 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Set some breakpoints and print complete vla.
+gdb_breakpoint [gdb_get_line_number "vla1-init"]
+gdb_continue_to_breakpoint "vla1-init"
+gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
+
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "print vla1" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
+  "print vla1 allocated"
+gdb_test "print vla2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
+  "print vla2 allocated"
+
+gdb_breakpoint [gdb_get_line_number "vla1-filled"]
+gdb_continue_to_breakpoint "vla1-filled"
+gdb_test "print vla1" \
+  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
+  "print vla1 filled"
+
+# Try to access history values for full vla prints.
+gdb_test "print \$1" " = <not allocated>" "print \$1"
+gdb_test "print \$2" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
+  "print \$2"
+gdb_test "print \$3" " = \\( *\\( *\\( *0, *0, *0,\[()0, .\]*\\)" \
+  "print \$3"
+gdb_test "print \$4" \
+  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" "print \$4"
+
+gdb_breakpoint [gdb_get_line_number "vla2-filled"]
+gdb_continue_to_breakpoint "vla2-filled"
+gdb_test "print vla2(1,43,20)" " = 1311" "print vla2(1,43,20)"
+gdb_test "print vla1(1,3,8)" " = 1001" "print vla2(1,3,8)"
+
+# Try to access history values for vla values.
+gdb_test "print \$9" " = 1311" "print \$9"
+gdb_test "print \$10" " = 1001" "print \$10"
diff --git a/gdb/testsuite/gdb.fortran/vla-ptr-info.exp b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
new file mode 100644
index 0000000..b2d8f00
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
@@ -0,0 +1,32 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Check the status of a pointer to a dynamic array.
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\)\\)\\) ${hex}" \
+  "print pvla pointer information"
diff --git a/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
new file mode 100644
index 0000000..98fd663
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp
@@ -0,0 +1,87 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla-sub.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Pass fixed array to function and handle them as vla in function.
+gdb_breakpoint [gdb_get_line_number "not-filled"]
+gdb_continue_to_breakpoint "not-filled (1st)"
+gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(42,42\\\)" \
+  "ptype array1 (passed fixed)"
+gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(42,42,42\\\)" \
+  "ptype array2 (passed fixed)"
+gdb_test "ptype array1(40, 10)" "type = integer\\\(kind=4\\\)" \
+  "ptype array1(40, 10) (passed fixed)"
+gdb_test "ptype array2(13, 11, 5)" "type = real\\\(kind=4\\\)" \
+  "ptype array2(13, 11, 5) (passed fixed)"
+
+# Pass sub arrays to function and handle them as vla in function.
+gdb_continue_to_breakpoint "not-filled (2nd)"
+gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(6,6\\\)" \
+  "ptype array1 (passed sub-array)"
+gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(6,6,6\\\)" \
+  "ptype array2 (passed sub-array)"
+gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
+  "ptype array1(3, 3) (passed sub-array)"
+gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
+  "ptype array2(4, 4, 4) (passed sub-array)"
+
+# Check ptype outside of bounds. This should not crash GDB.
+gdb_test "ptype array1(100, 100)" "no such vector element" \
+  "ptype array1(100, 100) subarray do not crash (passed sub-array)"
+gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
+  "ptype array2(100, 100, 100) subarray do not crash (passed sub-array)"
+
+# Pass vla to function.
+gdb_continue_to_breakpoint "not-filled (3rd)"
+gdb_test "ptype array1" "type = integer\\\(kind=4\\\) \\\(20,20\\\)" \
+  "ptype array1 (passed vla)"
+gdb_test "ptype array2" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
+  "ptype array2 (passed vla)"
+gdb_test "ptype array1(3, 3)" "type = integer\\\(kind=4\\\)" \
+  "ptype array1(3, 3) (passed vla)"
+gdb_test "ptype array2(4, 4, 4)" "type = real\\\(kind=4\\\)" \
+  "ptype array2(4, 4, 4) (passed vla)"
+
+# Check ptype outside of bounds. This should not crash GDB.
+gdb_test "ptype array1(100, 100)" "no such vector element" \
+  "ptype array1(100, 100) VLA do not crash (passed vla)"
+gdb_test "ptype array2(100, 100, 100)" "no such vector element" \
+  "ptype array2(100, 100, 100) VLA do not crash (passed vla)"
+
+# Pass fixed array to function and handle it as VLA of arbitrary length in
+# function.
+gdb_breakpoint [gdb_get_line_number "end-of-bar"]
+gdb_continue_to_breakpoint "end-of-bar"
+gdb_test "ptype array1" \
+  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(\\*\\)\\)?" \
+  "ptype array1 (arbitrary length)"
+gdb_test "ptype array2" \
+  "type = (PTR TO -> \\( )?integer(\\(kind=4\\)|\\*4) \\(4:9,10:\\*\\)\\)?" \
+  "ptype array2 (arbitrary length)"
+gdb_test "ptype array1(100)" "type = integer\\\(kind=4\\\)" \
+  "ptype array1(100) (arbitrary length)"
+gdb_test "ptype array2(4,100)" "type = integer\\\(kind=4\\\)" \
+  "ptype array2(4,100) (arbitrary length)"
diff --git a/gdb/testsuite/gdb.fortran/vla-ptype.exp b/gdb/testsuite/gdb.fortran/vla-ptype.exp
new file mode 100644
index 0000000..cd47bbe
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-ptype.exp
@@ -0,0 +1,96 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Check the ptype of various VLA states and pointer to VLA's.
+gdb_breakpoint [gdb_get_line_number "vla1-init"]
+gdb_continue_to_breakpoint "vla1-init"
+gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not initialized"
+gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not initialized"
+gdb_test "ptype pvla" "type = <not associated>" "ptype pvla not initialized"
+gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
+  "ptype vla1(3, 6, 9) not initialized"
+gdb_test "ptype vla2(5, 45, 20)" \
+  "no such vector element because not allocated" \
+  "ptype vla1(5, 45, 20) not initialized"
+
+gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
+gdb_continue_to_breakpoint "vla1-allocated"
+gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
+  "ptype vla1 allocated"
+
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
+  "ptype vla2 allocated"
+
+gdb_breakpoint [gdb_get_line_number "vla1-filled"]
+gdb_continue_to_breakpoint "vla1-filled"
+gdb_test "ptype vla1" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
+  "ptype vla1 filled"
+gdb_test "ptype vla1(3, 6, 9)" "type = real\\\(kind=4\\\)" \
+  "ptype vla1(3, 6, 9)"
+
+gdb_breakpoint [gdb_get_line_number "vla2-filled"]
+gdb_continue_to_breakpoint "vla2-filled"
+gdb_test "ptype vla2" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
+  "ptype vla2 filled"
+gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
+  "ptype vla1(5, 45, 20) filled"
+
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(10,10,10\\\)" \
+  "ptype pvla associated"
+gdb_test "ptype pvla(3, 6, 9)" "type = real\\\(kind=4\\\)" \
+  "ptype pvla(3, 6, 9)"
+
+gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
+gdb_continue_to_breakpoint "pvla-re-associated"
+gdb_test "ptype pvla" "type = real\\\(kind=4\\\) \\\(7,42:50,13:35\\\)" \
+  "ptype pvla re-associated"
+gdb_test "ptype vla2(5, 45, 20)" "type = real\\\(kind=4\\\)" \
+  "ptype vla1(5, 45, 20) re-associated"
+
+gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
+gdb_continue_to_breakpoint "pvla-deassociated"
+gdb_test "ptype pvla" "type = <not associated>" "ptype pvla deassociated"
+gdb_test "ptype pvla(5, 45, 20)" \
+  "no such vector element because not associated" \
+  "ptype pvla(5, 45, 20) not associated"
+
+gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
+gdb_continue_to_breakpoint "vla1-deallocated"
+gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not allocated"
+gdb_test "ptype vla1(3, 6, 9)" "no such vector element because not allocated" \
+  "ptype vla1(3, 6, 9) not allocated"
+
+gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
+gdb_continue_to_breakpoint "vla2-deallocated"
+gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not allocated"
+gdb_test "ptype vla2(5, 45, 20)" \
+  "no such vector element because not allocated" \
+  "ptype vla2(5, 45, 20) not allocated"
diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
new file mode 100644
index 0000000..8281425
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
@@ -0,0 +1,46 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Try to access values in non allocated VLA
+gdb_breakpoint [gdb_get_line_number "vla1-init"]
+gdb_continue_to_breakpoint "vla1-init"
+gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
+
+# Try to access value in allocated VLA
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "print sizeof(vla1)" " = 4000" "print sizeof allocated vla1"
+
+# Try to access values in undefined pointer to VLA (dangling)
+gdb_breakpoint [gdb_get_line_number "vla1-filled"]
+gdb_continue_to_breakpoint "vla1-filled"
+gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
+
+# Try to access values in pointer to VLA and compare them
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
diff --git a/gdb/testsuite/gdb.fortran/vla-sub.f90 b/gdb/testsuite/gdb.fortran/vla-sub.f90
new file mode 100644
index 0000000..dfda411
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-sub.f90
@@ -0,0 +1,82 @@ 
+! Copyright 2015 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+!
+! Original file written by Jakub Jelinek <jakub@redhat.com> and
+! Jan Kratochvil <jan.kratochvil@redhat.com>.
+! Modified for the GDB testcases by Keven Boell <keven.boell@intel.com>.
+
+subroutine foo (array1, array2)
+  integer :: array1 (:, :)
+  real    :: array2 (:, :, :)
+
+  array1(:,:) = 5                       ! not-filled
+  array1(1, 1) = 30
+
+  array2(:,:,:) = 6                     ! array1-filled
+  array2(:,:,:) = 3
+  array2(1,1,1) = 30
+  array2(3,3,3) = 90                    ! array2-almost-filled
+end subroutine
+
+subroutine bar (array1, array2)
+  integer :: array1 (*)
+  integer :: array2 (4:9, 10:*)
+
+  array1(5:10) = 1311
+  array1(7) = 1
+  array1(100) = 100
+  array2(4,10) = array1(7)
+  array2(4,100) = array1(7)
+  return                                ! end-of-bar
+end subroutine
+
+program vla_sub
+  interface
+    subroutine foo (array1, array2)
+      integer :: array1 (:, :)
+      real :: array2 (:, :, :)
+    end subroutine
+  end interface
+  interface
+    subroutine bar (array1, array2)
+      integer :: array1 (*)
+      integer :: array2 (4:9, 10:*)
+    end subroutine
+  end interface
+
+  real, allocatable :: vla1 (:, :, :)
+  integer, allocatable :: vla2 (:, :)
+
+  ! used for subroutine
+  integer :: sub_arr1(42, 42)
+  real    :: sub_arr2(42, 42, 42)
+  integer :: sub_arr3(42)
+
+  sub_arr1(:,:) = 1                   ! vla2-deallocated
+  sub_arr2(:,:,:) = 2
+  sub_arr3(:) = 3
+
+  call foo(sub_arr1, sub_arr2)
+  call foo(sub_arr1(5:10, 5:10), sub_arr2(10:15,10:15,10:15))
+
+  allocate (vla1 (10,10,10))
+  allocate (vla2 (20,20))
+  vla1(:,:,:) = 1311
+  vla2(:,:) = 42
+  call foo(vla2, vla1)
+
+  call bar(sub_arr3, sub_arr1)
+end program vla_sub
diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
new file mode 100644
index 0000000..88defda
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp
@@ -0,0 +1,35 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla-sub.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Check VLA with arbitary length and check that elements outside of
+# bounds of the passed VLA can be accessed correctly.
+gdb_breakpoint [gdb_get_line_number "end-of-bar"]
+gdb_continue_to_breakpoint "end-of-bar"
+gdb_test "p array1(42)" " = 3" "print arbitary array1(42)"
+gdb_test "p array1(100)" " = 100" "print arbitary array1(100)"
+gdb_test "p array2(4,10)" " = 1" "print arbitary array2(4,10)"
+gdb_test "p array2(4,100)" " = 1" "print arbitary array2(4,100)"
diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
new file mode 100644
index 0000000..6738875
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp
@@ -0,0 +1,49 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla-sub.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# "up" works with GCC but other Fortran compilers may copy the values into the
+# outer function only on the exit of the inner function.
+# We need both variants as depending on the arch we optionally may still be
+# executing the caller line or not after `finish'.
+
+gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
+gdb_continue_to_breakpoint "array2-almost-filled"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was filled"
+gdb_test "print array2(2,1,1)=20" " = 20" \
+  "set array(2,2,2) to 20 in subroutine"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was mofified in debugger"
+
+gdb_test "finish" \
+  ".*(foo\\\(sub_arr1\\\(5:10, 5:10\\\), sub_arr2\\\(10:15,10:15,10:15\\\)\\\)|foo \\\(array1=..., array2=...\\\).*)" \
+  "finish function"
+gdb_test "p sub_arr1(5, 7)" " = 5" "sub_arr1(5, 7) after finish"
+gdb_test "p sub_arr1(1, 1)" " = 30" "sub_arr1(1, 1) after finish"
+gdb_test "p sub_arr2(1, 1, 1)" " = 30" "sub_arr2(1, 1, 1) after finish"
+gdb_test "p sub_arr2(2, 1, 1)" " = 20" "sub_arr2(2, 1, 1) after finish"
+
diff --git a/gdb/testsuite/gdb.fortran/vla-value-sub.exp b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
new file mode 100644
index 0000000..de88333
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-value-sub.exp
@@ -0,0 +1,90 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla-sub.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+    {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Check the values of VLA's in subroutine can be evaluated correctly
+
+# Try to access values from a fixed array handled as VLA in subroutine.
+gdb_breakpoint [gdb_get_line_number "not-filled"]
+gdb_continue_to_breakpoint "not-filled (1st)"
+gdb_test "print array1" " = \\(\[()1, .\]*\\)" \
+  "print passed array1 in foo (passed fixed array)"
+
+gdb_breakpoint [gdb_get_line_number "array1-filled"]
+gdb_continue_to_breakpoint "array1-filled (1st)"
+gdb_test "print array1(5, 7)" " = 5" \
+  "print array1(5, 7) after filled in foo (passed fixed array)"
+gdb_test "print array1(1, 1)" " = 30" \
+  "print array1(1, 1) after filled in foo (passed fixed array)"
+
+gdb_breakpoint [gdb_get_line_number "array2-almost-filled"]
+gdb_continue_to_breakpoint "array2-almost-filled (1st)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was filled (passed fixed array)"
+gdb_test "print array2(2,1,1)=20" " = 20" \
+  "set array(2,2,2) to 20 in subroutine (passed fixed array)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was mofified in debugger (passed fixed array)"
+
+
+# Try to access values from a fixed sub-array handled as VLA in subroutine.
+gdb_continue_to_breakpoint "not-filled (2nd)"
+gdb_test "print array1" " = \\(\[()5, .\]*\\)" \
+  "print passed array1 in foo (passed sub-array)"
+
+gdb_continue_to_breakpoint "array1-filled (2nd)"
+gdb_test "print array1(5, 5)" " = 5" \
+  "print array1(5, 5) after filled in foo (passed sub-array)"
+gdb_test "print array1(1, 1)" " = 30" \
+  "print array1(1, 1) after filled in foo (passed sub-array)"
+
+gdb_continue_to_breakpoint "array2-almost-filled (2nd)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was filled (passed sub-array)"
+gdb_test "print array2(2,1,1)=20" " = 20" \
+  "set array(2,2,2) to 20 in subroutine (passed sub-array)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was mofified in debugger (passed sub-array)"
+
+
+# Try to access values from a VLA passed to subroutine.
+gdb_continue_to_breakpoint "not-filled (3rd)"
+gdb_test "print array1" " = \\(\[()42, .\]*\\)" \
+  "print passed array1 in foo (passed vla)"
+
+gdb_continue_to_breakpoint "array1-filled (3rd)"
+gdb_test "print array1(5, 5)" " = 5" \
+  "print array1(5, 5) after filled in foo (passed vla)"
+gdb_test "print array1(1, 1)" " = 30" \
+  "print array1(1, 1) after filled in foo (passed vla)"
+
+gdb_continue_to_breakpoint "array2-almost-filled (3rd)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *3, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was filled (passed vla)"
+gdb_test "print array2(2,1,1)=20" " = 20" \
+  "set array(2,2,2) to 20 in subroutine (passed vla)"
+gdb_test "print array2" " = \\( *\\( *\\( *30, *20, *3,\[()3, .\]*\\)" \
+  "print array2 in foo after it was mofified in debugger (passed vla)"
diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran/vla-value.exp
new file mode 100644
index 0000000..6ea1eff
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-value.exp
@@ -0,0 +1,148 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile "vla.f90"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
+     {debug f90 quiet}] } {
+    return -1
+}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+
+# Try to access values in non allocated VLA
+gdb_breakpoint [gdb_get_line_number "vla1-init"]
+gdb_continue_to_breakpoint "vla1-init"
+gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
+gdb_test "print &vla1" \
+  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not allocated>\\\)\\\)\\\) $hex" \
+  "print non-allocated &vla1"
+gdb_test "print vla1(1,1,1)" "no such vector element because not allocated" \
+  "print member in non-allocated vla1 (1)"
+gdb_test "print vla1(101,202,303)" \
+  "no such vector element because not allocated" \
+  "print member in non-allocated vla1 (2)"
+gdb_test "print vla1(5,2,18)=1" "no such vector element because not allocated" \
+  "set member in non-allocated vla1"
+
+# Try to access value in allocated VLA
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "next" "\\d+(\\t|\\s)+vla1\\\(3, 6, 9\\\) = 42" \
+  "step over value assignment of vla1"
+gdb_test "print &vla1" \
+  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
+  "print allocated &vla1"
+gdb_test "print vla1(3, 6, 9)" " = 1311" "print allocated vla1(3,6,9)"
+gdb_test "print vla1(1, 3, 8)" " = 1311" "print allocated vla1(1,3,8)"
+gdb_test "print vla1(9, 9, 9) = 999" " = 999" \
+  "print allocated vla1(9,9,9)=1"
+
+# Try to access values in allocated VLA after specific assignment
+gdb_breakpoint [gdb_get_line_number "vla1-filled"]
+gdb_continue_to_breakpoint "vla1-filled"
+gdb_test "print vla1(3, 6, 9)" " = 42" \
+  "print allocated vla1(3,6,9) after specific assignment (filled)"
+gdb_test "print vla1(1, 3, 8)" " = 1001" \
+  "print allocated vla1(1,3,8) after specific assignment (filled)"
+gdb_test "print vla1(9, 9, 9)" " = 999" \
+  "print allocated vla1(9,9,9) after assignment in debugger (filled)"
+
+# Try to access values in undefined pointer to VLA (dangling)
+gdb_test "print pvla" " = <not associated>" "print undefined pvla"
+gdb_test "print &pvla" \
+  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(<not associated>\\\)\\\)\\\) $hex" \
+  "print non-associated &pvla"
+gdb_test "print pvla(1, 3, 8)" "no such vector element because not associated" \
+  "print undefined pvla(1,3,8)"
+
+# Try to access values in pointer to VLA and compare them
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test "print &pvla" \
+  " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \
+  "print associated &pvla"
+gdb_test "print pvla(3, 6, 9)" " = 42" "print associated pvla(3,6,9)"
+gdb_test "print pvla(1, 3, 8)" " = 1001" "print associated pvla(1,3,8)"
+gdb_test "print pvla(9, 9, 9)" " = 999" "print associated pvla(9,9,9)"
+
+# Fill values to VLA using pointer and check
+gdb_breakpoint [gdb_get_line_number "pvla-re-associated"]
+gdb_continue_to_breakpoint "pvla-re-associated"
+gdb_test "print pvla(5, 45, 20)" \
+  " = 1" "print pvla(5, 45, 20) after filled using pointer"
+gdb_test "print vla2(5, 45, 20)" \
+  " = 1" "print vla2(5, 45, 20) after filled using pointer"
+gdb_test "print pvla(7, 45, 14)" " = 2" \
+  "print pvla(7, 45, 14) after filled using pointer"
+gdb_test "print vla2(7, 45, 14)" " = 2" \
+  "print vla2(7, 45, 14) after filled using pointer"
+
+# Try to access values of deassociated VLA pointer
+gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
+gdb_continue_to_breakpoint "pvla-deassociated"
+gdb_test "print pvla(5, 45, 20)" \
+  "no such vector element because not associated" \
+  "print pvla(5, 45, 20) after deassociated"
+gdb_test "print pvla(7, 45, 14)" \
+  "no such vector element because not associated" \
+  "print pvla(7, 45, 14) after dissasociated"
+gdb_test "print pvla" " = <not associated>" \
+  "print vla1 after deassociated"
+
+# Try to access values of deallocated VLA
+gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
+gdb_continue_to_breakpoint "vla1-deallocated"
+gdb_test "print vla1(3, 6, 9)" "no such vector element because not allocated" \
+  "print allocated vla1(3,6,9) after specific assignment (deallocated)"
+gdb_test "print vla1(1, 3, 8)" "no such vector element because not allocated" \
+  "print allocated vla1(1,3,8) after specific assignment (deallocated)"
+gdb_test "print vla1(9, 9, 9)" "no such vector element because not allocated" \
+  "print allocated vla1(9,9,9) after assignment in debugger (deallocated)"
+
+
+# Try to assign VLA to user variable
+clean_restart ${testfile}
+
+if ![runto MAIN__] then {
+    perror "couldn't run to breakpoint MAIN__"
+    continue
+}
+gdb_breakpoint [gdb_get_line_number "vla2-allocated"]
+gdb_continue_to_breakpoint "vla2-allocated"
+gdb_test "next" "\\d+.*vla1\\(3, 6, 9\\) = 42" "next (1)"
+
+gdb_test_no_output "set \$myvar = vla1" "set \$myvar = vla1"
+gdb_test "print \$myvar" \
+  " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
+  "print \$myvar set to vla1"
+
+gdb_test "next" "\\d+.*vla1\\(1, 3, 8\\) = 1001" "next (2)"
+gdb_test "print \$myvar(3,6,9)" " = 1311" "print \$myvar(3,6,9)"
+
+gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+gdb_continue_to_breakpoint "pvla-associated"
+gdb_test_no_output "set \$mypvar = pvla" "set \$mypvar = pvla"
+gdb_test "print \$mypvar(1,3,8)" " = 1001" "print \$mypvar(1,3,8)"
+
+# deallocate pointer and make sure user defined variable still has the
+# right value.
+gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
+gdb_continue_to_breakpoint "pvla-deassociated"
+gdb_test "print \$mypvar(1,3,8)" " = 1001" \
+  "print \$mypvar(1,3,8) after deallocated"
diff --git a/gdb/testsuite/gdb.fortran/vla.f90 b/gdb/testsuite/gdb.fortran/vla.f90
new file mode 100644
index 0000000..61e22b9
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla.f90
@@ -0,0 +1,56 @@ 
+! Copyright 2015 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+program vla
+  real, target, allocatable :: vla1 (:, :, :)
+  real, target, allocatable :: vla2 (:, :, :)
+  real, target, allocatable :: vla3 (:, :)
+  real, pointer :: pvla (:, :, :)
+  logical :: l
+
+  allocate (vla1 (10,10,10))          ! vla1-init
+  l = allocated(vla1)
+
+  allocate (vla2 (1:7,42:50,13:35))   ! vla1-allocated
+  l = allocated(vla2)
+
+  vla1(:, :, :) = 1311                ! vla2-allocated
+  vla1(3, 6, 9) = 42
+  vla1(1, 3, 8) = 1001
+  vla1(6, 2, 7) = 13
+
+  vla2(:, :, :) = 1311                ! vla1-filled
+  vla2(5, 45, 20) = 42
+
+  pvla => vla1                        ! vla2-filled
+  l = associated(pvla)
+
+  pvla => vla2                        ! pvla-associated
+  l = associated(pvla)
+  pvla(5, 45, 20) = 1
+  pvla(7, 45, 14) = 2
+
+  pvla => null()                      ! pvla-re-associated
+  l = associated(pvla)
+
+  deallocate (vla1)                   ! pvla-deassociated
+  l = allocated(vla1)
+
+  deallocate (vla2)                   ! vla1-deallocated
+  l = allocated(vla2)
+
+  allocate (vla3 (2,2))               ! vla2-deallocated
+  vla3(:,:) = 13
+end program vla
diff --git a/gdb/testsuite/gdb.mi/mi-vla-fortran.exp b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
new file mode 100644
index 0000000..d191623
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
@@ -0,0 +1,182 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Verify that, using the MI, we can evaluate a simple C Variable Length
+# Array (VLA).
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+standard_testfile vla.f90
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+     {debug f90}] != "" } {
+     untested mi-vla-fortran.exp
+     return -1
+}
+
+mi_delete_breakpoints
+mi_gdb_reinitialize_dir $srcdir/$subdir
+mi_gdb_load ${binfile}
+
+set bp_lineno [gdb_get_line_number "vla1-not-allocated"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 1 "del" "vla" \
+  ".*vla.f90" $bp_lineno $hex \
+  "insert breakpoint at line $bp_lineno (vla not allocated)"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "500-data-evaluate-expression vla1" \
+  "500\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
+
+mi_create_varobj_checked vla1_not_allocated vla1 "<not allocated>" \
+  "create local variable vla1_not_allocated"
+mi_gdb_test "501-var-info-type vla1_not_allocated" \
+  "501\\^done,type=\"<not allocated>\"" \
+  "info type variable vla1_not_allocated"
+mi_gdb_test "502-var-show-format vla1_not_allocated" \
+  "502\\^done,format=\"natural\"" \
+  "show format variable vla1_not_allocated"
+mi_gdb_test "503-var-evaluate-expression vla1_not_allocated" \
+  "503\\^done,value=\"\\\[0\\\]\"" \
+  "eval variable vla1_not_allocated"
+mi_list_array_varobj_children_with_index "vla1_not_allocated" "0" "1" \
+    "real\\\(kind=4\\\)" "get children of vla1_not_allocated"
+
+
+
+set bp_lineno [gdb_get_line_number "vla1-allocated"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 2 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno (vla allocated)"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "510-data-evaluate-expression vla1" \
+  "510\\^done,value=\"\\(0, 0, 0, 0, 0\\)\"" "evaluate allocated vla"
+
+mi_create_varobj_checked vla1_allocated vla1 "real\\\(kind=4\\\) \\\(5\\\)" \
+  "create local variable vla1_allocated"
+mi_gdb_test "511-var-info-type vla1_allocated" \
+  "511\\^done,type=\"real\\\(kind=4\\\) \\\(5\\\)\"" \
+  "info type variable vla1_allocated"
+mi_gdb_test "512-var-show-format vla1_allocated" \
+  "512\\^done,format=\"natural\"" \
+  "show format variable vla1_allocated"
+mi_gdb_test "513-var-evaluate-expression vla1_allocated" \
+  "513\\^done,value=\"\\\[5\\\]\"" \
+  "eval variable vla1_allocated"
+mi_list_array_varobj_children_with_index "vla1_allocated" "5" "1" \
+    "real\\\(kind=4\\\)" "get children of vla1_allocated"
+
+
+set bp_lineno [gdb_get_line_number "vla1-filled"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 3 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "520-data-evaluate-expression vla1" \
+  "520\\^done,value=\"\\(1, 1, 1, 1, 1\\)\"" "evaluate filled vla"
+
+
+set bp_lineno [gdb_get_line_number "vla1-modified"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 4 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "530-data-evaluate-expression vla1" \
+  "530\\^done,value=\"\\(1, 42, 1, 24, 1\\)\"" "evaluate filled vla"
+mi_gdb_test "540-data-evaluate-expression vla1(1)" \
+  "540\\^done,value=\"1\"" "evaluate filled vla"
+mi_gdb_test "550-data-evaluate-expression vla1(2)" \
+  "550\\^done,value=\"42\"" "evaluate filled vla"
+mi_gdb_test "560-data-evaluate-expression vla1(4)" \
+  "560\\^done,value=\"24\"" "evaluate filled vla"
+
+
+set bp_lineno [gdb_get_line_number "vla1-deallocated"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 5 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "570-data-evaluate-expression vla1" \
+  "570\\^done,value=\"<not allocated>\"" "evaluate not allocated vla"
+
+
+set bp_lineno [gdb_get_line_number "pvla2-not-associated"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 6 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "580-data-evaluate-expression pvla2" \
+  "580\\^done,value=\"<not associated>\"" "evaluate not associated vla"
+
+mi_create_varobj_checked pvla2_not_associated pvla2 "<not associated>" \
+  "create local variable pvla2_not_associated"
+mi_gdb_test "581-var-info-type pvla2_not_associated" \
+  "581\\^done,type=\"<not associated>\"" \
+  "info type variable pvla2_not_associated"
+mi_gdb_test "582-var-show-format pvla2_not_associated" \
+  "582\\^done,format=\"natural\"" \
+  "show format variable pvla2_not_associated"
+mi_gdb_test "583-var-evaluate-expression pvla2_not_associated" \
+  "583\\^done,value=\"\\\[0\\\]\"" \
+  "eval variable pvla2_not_associated"
+mi_list_array_varobj_children_with_index "pvla2_not_associated" "0" "1" \
+    "real\\\(kind=4\\\)" "get children of pvla2_not_associated"
+
+
+set bp_lineno [gdb_get_line_number "pvla2-associated"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 7 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "590-data-evaluate-expression pvla2" \
+  "590\\^done,value=\"\\(\\( 2, 2, 2, 2, 2\\) \\( 2, 2, 2, 2, 2\\) \\)\"" \
+  "evaluate associated vla"
+
+mi_create_varobj_checked pvla2_associated pvla2 \
+  "real\\\(kind=4\\\) \\\(5,2\\\)" "create local variable pvla2_associated"
+mi_gdb_test "591-var-info-type pvla2_associated" \
+  "591\\^done,type=\"real\\\(kind=4\\\) \\\(5,2\\\)\"" \
+  "info type variable pvla2_associated"
+mi_gdb_test "592-var-show-format pvla2_associated" \
+  "592\\^done,format=\"natural\"" \
+  "show format variable pvla2_associated"
+mi_gdb_test "593-var-evaluate-expression pvla2_associated" \
+  "593\\^done,value=\"\\\[2\\\]\"" \
+  "eval variable pvla2_associated"
+
+
+set bp_lineno [gdb_get_line_number "pvla2-set-to-null"]
+mi_create_breakpoint "-t vla.f90:$bp_lineno" 8 "del" "vla" ".*vla.f90" \
+  $bp_lineno $hex "insert breakpoint at line $bp_lineno"
+mi_run_cmd
+mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+  { "" "disp=\"del\"" } "run to breakpoint at line $bp_lineno"
+mi_gdb_test "600-data-evaluate-expression pvla2" \
+  "600\\^done,value=\"<not associated>\"" "evaluate vla pointer set to null"
+
+mi_gdb_exit
+return 0
diff --git a/gdb/testsuite/gdb.mi/vla.f90 b/gdb/testsuite/gdb.mi/vla.f90
new file mode 100644
index 0000000..0b89d34
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/vla.f90
@@ -0,0 +1,42 @@ 
+! Copyright 2015 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+program vla
+  real, allocatable :: vla1 (:)
+  real, target, allocatable :: vla2(:, :)
+  real, pointer :: pvla2 (:, :)
+  logical :: l
+
+  allocate (vla1 (5))         ! vla1-not-allocated
+  l = allocated(vla1)         ! vla1-allocated
+
+  vla1(:) = 1
+  vla1(2) = 42                ! vla1-filled
+  vla1(4) = 24
+
+  deallocate (vla1)           ! vla1-modified
+  l = allocated(vla1)         ! vla1-deallocated
+
+  allocate (vla2 (5, 2))
+  vla2(:, :) = 2
+
+  pvla2 => vla2               ! pvla2-not-associated
+  l = associated(pvla2)       ! pvla2-associated
+
+  pvla2(2, 1) = 42
+
+  pvla2 => null()
+  l = associated(pvla2)       ! pvla2-set-to-null
+end program vla