Jan Kratochvil 7306e88
From b6e668ccd356ea3e75d30f20314334b1203c22de Mon Sep 17 00:00:00 2001
Jan Kratochvil 7306e88
From: Bernhard Heckel <bernhard.heckel@intel.com>
Jan Kratochvil 7306e88
Date: Tue, 12 Jul 2016 08:19:34 +0200
Jan Kratochvil 7306e88
Subject: [PATCH 5/7] Resolve dynamic target types of pointers.
Jan Kratochvil 7306e88
Jan Kratochvil 7306e88
When dereferencing pointers to dynamic target types,
Jan Kratochvil 7306e88
resolve the target type.
Jan Kratochvil 7306e88
Jan Kratochvil 7306e88
2016-06-30  Bernhard Heckel  <bernhard.heckel@intel.com>
Jan Kratochvil 7306e88
Jan Kratochvil 7306e88
gdb/Changelog:
Jan Kratochvil 7306e88
	* NEWS: Added entry.
Jan Kratochvil 7306e88
	* c-valprint.c (c_print_val): Resolve dynamic target types.
Jan Kratochvil 7306e88
	* valops.c (value_ind): Resolve dynamic target types.
Jan Kratochvil 7306e88
	* valprint.c (check_printable): Don't shortcut not associated
Jan Kratochvil 7306e88
	  pointers.
Jan Kratochvil 7306e88
Jan Kratochvil 7306e88
gdb/Testsuite/Changelog:
Jan Kratochvil 7306e88
	* pointers.f90: Added pointer to dynamic types.
Jan Kratochvil 7306e88
	* gdb.fortran/pointers.exp: New.
Jan Kratochvil 7306e88
Jan Kratochvil 7306e88
Change-Id: I998d4da4a5ba4899b8cb2115576f44efa741e698
Jan Kratochvil 7306e88
---
Jan Kratochvil 7306e88
 gdb/NEWS                               |   2 +
Jan Kratochvil 7306e88
 gdb/c-valprint.c                       |  22 ++++++
Jan Kratochvil 7306e88
 gdb/testsuite/gdb.cp/vla-cxx.exp       |   4 ++
Jan Kratochvil 7306e88
 gdb/testsuite/gdb.fortran/pointers.exp | 123 +++++++++++++++++++++++++++++++++
Jan Kratochvil 7306e88
 gdb/testsuite/gdb.fortran/pointers.f90 |  17 +++++
Jan Kratochvil 7306e88
 gdb/valops.c                           |  16 ++++-
Jan Kratochvil 7306e88
 gdb/valprint.c                         |   6 --
Jan Kratochvil 7306e88
 7 files changed, 182 insertions(+), 8 deletions(-)
Jan Kratochvil 7306e88
 create mode 100644 gdb/testsuite/gdb.fortran/pointers.exp
Jan Kratochvil 7306e88
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/NEWS
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/NEWS	2016-08-07 21:18:44.032409065 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/NEWS	2016-08-07 21:19:17.178715116 +0200
Jan Kratochvil 9faadbe
@@ -1,6 +1,8 @@
Jan Kratochvil 9faadbe
 		What has changed in GDB?
Jan Kratochvil 9faadbe
 	     (Organized release by release)
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
+* Fortran: Support pointers to dynamic types.
Jan Kratochvil 7306e88
+
Jan Kratochvil 9faadbe
 *** Changes in GDB 7.12
Jan Kratochvil 7306e88
 
Jan Kratochvil 9faadbe
 * GDB and GDBserver now build with a C++ compiler by default.
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/c-valprint.c
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/c-valprint.c	2016-08-07 21:18:44.032409065 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/c-valprint.c	2016-08-07 21:18:51.087474207 +0200
Jan Kratochvil 9faadbe
@@ -645,6 +645,28 @@
Jan Kratochvil 7306e88
       else
Jan Kratochvil 7306e88
 	{
Jan Kratochvil 7306e88
 	  /* normal case */
Jan Kratochvil 7306e88
+	  if (TYPE_CODE (type) == TYPE_CODE_PTR
Jan Kratochvil 7306e88
+	      && 1 == is_dynamic_type (type))
Jan Kratochvil 7306e88
+	    {
Jan Kratochvil 7306e88
+	      CORE_ADDR addr;
Jan Kratochvil 7306e88
+	      if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (type)))
Jan Kratochvil 7306e88
+		addr = value_address (val);
Jan Kratochvil 7306e88
+	      else
Jan Kratochvil 7306e88
+		addr = value_as_address (val);
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+	      /* We resolve the target-type only when the
Jan Kratochvil 7306e88
+	         pointer is associated.  */
Jan Kratochvil 7306e88
+	      if ((addr != 0)
Jan Kratochvil 7306e88
+		  && (0 == type_not_associated (type)))
Jan Kratochvil 7306e88
+		  TYPE_TARGET_TYPE (type) =
Jan Kratochvil 7306e88
+		      resolve_dynamic_type (TYPE_TARGET_TYPE (type),
Jan Kratochvil 7306e88
+					    NULL, addr);
Jan Kratochvil 7306e88
+	    }
Jan Kratochvil 7306e88
+	  else
Jan Kratochvil 7306e88
+	    {
Jan Kratochvil 7306e88
+	      /* Do nothing. References are already resolved from the beginning,
Jan Kratochvil 7306e88
+	         only pointers are resolved when we actual need the target.  */
Jan Kratochvil 7306e88
+	    }
Jan Kratochvil 7306e88
 	  fprintf_filtered (stream, "(");
Jan Kratochvil 7306e88
 	  type_print (value_type (val), "", stream, -1);
Jan Kratochvil 7306e88
 	  fprintf_filtered (stream, ") ");
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/testsuite/gdb.cp/vla-cxx.exp
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/testsuite/gdb.cp/vla-cxx.exp	2016-08-07 21:18:44.033409074 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/testsuite/gdb.cp/vla-cxx.exp	2016-08-07 21:18:51.088474216 +0200
Jan Kratochvil 9faadbe
@@ -26,6 +26,8 @@
Jan Kratochvil 7306e88
 gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
Jan Kratochvil 7306e88
 gdb_continue_to_breakpoint "Before pointer assignment"
Jan Kratochvil 7306e88
 gdb_test "ptype ptr" "int \\(\\*\\)\\\[variable length\\\]" "ptype ptr, Before pointer assignment"
Jan Kratochvil 7306e88
+gdb_test "print ptr" "\\(int \\(\\*\\)\\\[variable length\\\]\\) 0x0" "print ptr, Before pointer assignment"
Jan Kratochvil 7306e88
+gdb_test "print *ptr" "Cannot access memory at address 0x0" "print *ptr, Before pointer assignment"
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
 gdb_breakpoint [gdb_get_line_number "vlas_filled"]
Jan Kratochvil 7306e88
 gdb_continue_to_breakpoint "vlas_filled"
Jan Kratochvil 9faadbe
@@ -38,3 +40,5 @@
Jan Kratochvil 7306e88
 gdb_test "print vlaref2" " = \\(.*\\) @$hex: \\{5, 7, 9\\}"
Jan Kratochvil 7306e88
 gdb_test "print c" " = \\{e = \\{c = @$hex\\}\\}"
Jan Kratochvil 7306e88
 gdb_test "ptype ptr" "int \\(\\*\\)\\\[3\\\]"
Jan Kratochvil 7306e88
+gdb_test "print ptr" "\\(int \\(\\*\\)\\\[3\\\]\\) $hex"
Jan Kratochvil 7306e88
+gdb_test "print *ptr" " = \\{5, 7, 9\\}"
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/testsuite/gdb.fortran/pointers.exp
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/testsuite/gdb.fortran/pointers.exp	2016-08-07 21:18:51.088474216 +0200
Jan Kratochvil 7306e88
@@ -0,0 +1,123 @@
Jan Kratochvil 7306e88
+# Copyright 2016 Free Software Foundation, Inc.
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+# This program is free software; you can redistribute it and/or modify
Jan Kratochvil 7306e88
+# it under the terms of the GNU General Public License as published by
Jan Kratochvil 7306e88
+# the Free Software Foundation; either version 3 of the License, or
Jan Kratochvil 7306e88
+# (at your option) any later version.
Jan Kratochvil 7306e88
+#
Jan Kratochvil 7306e88
+# This program is distributed in the hope that it will be useful,
Jan Kratochvil 7306e88
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
Jan Kratochvil 7306e88
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jan Kratochvil 7306e88
+# GNU General Public License for more details.
Jan Kratochvil 7306e88
+#
Jan Kratochvil 7306e88
+# You should have received a copy of the GNU General Public License
Jan Kratochvil 7306e88
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+standard_testfile "pointers.f90"
Jan Kratochvil 7306e88
+load_lib fortran.exp
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
Jan Kratochvil 7306e88
+    {debug f90 quiet}] } {
Jan Kratochvil 7306e88
+    return -1
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+if ![runto_main] {
Jan Kratochvil 7306e88
+    untested "could not run to main"
Jan Kratochvil 7306e88
+    return -1
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+# Depending on the compiler being used, the type names can be printed differently.
Jan Kratochvil 7306e88
+set logical [fortran_logical4]
Jan Kratochvil 7306e88
+set real [fortran_real4]
Jan Kratochvil 7306e88
+set int [fortran_int4]
Jan Kratochvil 7306e88
+set complex [fortran_complex4]
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
Jan Kratochvil 7306e88
+gdb_continue_to_breakpoint "Before pointer assignment"
Jan Kratochvil 7306e88
+gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) 0x0" "print logp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *logp" "Cannot access memory at address 0x0" "print *logp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) 0x0" "print comp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *comp" "Cannot access memory at address 0x0" "print *comp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) 0x0" "print charp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *charp" "Cannot access memory at address 0x0" "print *charp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) 0x0" "print charap, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *charap" "Cannot access memory at address 0x0" "print *charap, not associated"
Jan Kratochvil 7306e88
+gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0" "print intp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *intp" "Cannot access memory at address 0x0" "print *intp, not associated"
Jan Kratochvil 7306e88
+set test "print intap, not associated"
Jan Kratochvil 7306e88
+gdb_test_multiple "print intap" $test {
Jan Kratochvil 7306e88
+  -re " = \\(PTR TO -> \\( $int \\(:,:\\)\\)\\) <not associated>\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+  -re " = <not associated>\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) 0x0" "print realp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print *realp" "Cannot access memory at address 0x0" "print *realp, not associated"
Jan Kratochvil 7306e88
+gdb_test "print \$my_var = intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0"
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+gdb_breakpoint [gdb_get_line_number "Before value assignment"]
Jan Kratochvil 7306e88
+gdb_continue_to_breakpoint "Before value assignment"
Jan Kratochvil 7306e88
+gdb_test "print *(twop)%ivla2" "= <not allocated>"
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+gdb_breakpoint [gdb_get_line_number "After value assignment"]
Jan Kratochvil 7306e88
+gdb_continue_to_breakpoint "After value assignment"
Jan Kratochvil 7306e88
+gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *logp" "= \\.TRUE\\."
Jan Kratochvil 7306e88
+gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *comp" "= \\(1,2\\)"
Jan Kratochvil 7306e88
+gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *charp" "= 'a'"
Jan Kratochvil 7306e88
+gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *charap" "= 'abc'"
Jan Kratochvil 7306e88
+gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *intp" "= 10"
Jan Kratochvil 7306e88
+set test_name "print intap, associated"
Jan Kratochvil 7306e88
+gdb_test_multiple "print intap" $test_name {
Jan Kratochvil 7306e88
+  -re "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+  -re "= \\(PTR TO -> \\( $int \\(10,2\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    gdb_test "print *intap" "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)"
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+set test_name "print intvlap, associated"
Jan Kratochvil 7306e88
+gdb_test_multiple "print intvlap" $test_name {
Jan Kratochvil 7306e88
+  -re "= \\(2, 2, 2, 4(, 2){6}\\)\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+  -re "= \\(PTR TO -> \\( $int \\(10\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    gdb_test "print *intvlap" "= \\(2, 2, 2, 4(, 2){6}\\)"
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *realp" "= 3\\.14000\\d+"
Jan Kratochvil 7306e88
+gdb_test "print arrayOfPtr(2)%p" "= \\(PTR TO -> \\( Type two \\)\\) $hex\( <.*>\)?"
Jan Kratochvil 7306e88
+gdb_test "print *(arrayOfPtr(2)%p)" "= \\( ivla1 = \\(11, 12, 13\\), ivla2 = \\(\\( 211, 221\\) \\( 212, 222\\) \\) \\)"
Jan Kratochvil 7306e88
+set test_name "print arrayOfPtr(3)%p"
Jan Kratochvil 7306e88
+gdb_test_multiple $test_name $test_name {
Jan Kratochvil 7306e88
+  -re "= \\(PTR TO -> \\( Type two \\)\\) <not associated>\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+  -re "= \\(PTR TO -> \\( Type two \\)\\) 0x0\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+set test_name "print *(arrayOfPtr(3)%p), associated"
Jan Kratochvil 7306e88
+gdb_test_multiple "print *(arrayOfPtr(3)%p)" $test_name {
Jan Kratochvil 7306e88
+  -re "Cannot access memory at address 0x0\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+  -re "Attempt to take contents of a not associated pointer.\r\n$gdb_prompt $" {
Jan Kratochvil 7306e88
+    pass $test_name
Jan Kratochvil 7306e88
+  }
Jan Kratochvil 7306e88
+}
Jan Kratochvil 7306e88
+gdb_test "print *((integer*) &inta + 2)" "= 3" "print temporary pointer, array"
Jan Kratochvil 7306e88
+gdb_test "print *((integer*) &intvla + 3)" "= 4" "print temporary pointer, allocated vla"
Jan Kratochvil 7306e88
+gdb_test "print \$pc" "= \\(PTR TO -> \\( void \\(\\)\\(\\)\\)\\) $hex <pointers\\+\\d+>" "Print program counter"
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/testsuite/gdb.fortran/pointers.f90
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/testsuite/gdb.fortran/pointers.f90	2016-08-07 21:18:44.033409074 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/testsuite/gdb.fortran/pointers.f90	2016-08-07 21:18:51.088474216 +0200
Jan Kratochvil 9faadbe
@@ -20,14 +20,20 @@
Jan Kratochvil 7306e88
     integer, allocatable :: ivla2 (:, :)
Jan Kratochvil 7306e88
   end type two
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
+  type :: twoPtr
Jan Kratochvil 7306e88
+    type (two), pointer :: p
Jan Kratochvil 7306e88
+  end type twoPtr
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
   logical, target :: logv
Jan Kratochvil 7306e88
   complex, target :: comv
Jan Kratochvil 7306e88
   character, target :: charv
Jan Kratochvil 7306e88
   character (len=3), target :: chara
Jan Kratochvil 7306e88
   integer, target :: intv
Jan Kratochvil 7306e88
   integer, target, dimension (10,2) :: inta
Jan Kratochvil 7306e88
+  integer, target, allocatable, dimension (:) :: intvla
Jan Kratochvil 7306e88
   real, target    :: realv
Jan Kratochvil 7306e88
   type(two), target  :: twov
Jan Kratochvil 7306e88
+  type(twoPtr) :: arrayOfPtr (3)
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
   logical, pointer :: logp
Jan Kratochvil 7306e88
   complex, pointer :: comp
Jan Kratochvil 9faadbe
@@ -35,6 +41,7 @@
Jan Kratochvil 7306e88
   character (len=3), pointer:: charap
Jan Kratochvil 7306e88
   integer, pointer :: intp
Jan Kratochvil 7306e88
   integer, pointer, dimension (:,:) :: intap
Jan Kratochvil 7306e88
+  integer, pointer, dimension (:) :: intvlap
Jan Kratochvil 7306e88
   real, pointer :: realp
Jan Kratochvil 7306e88
   type(two), pointer :: twop
Jan Kratochvil 7306e88
 
Jan Kratochvil 9faadbe
@@ -44,8 +51,12 @@
Jan Kratochvil 7306e88
   nullify (charap)
Jan Kratochvil 7306e88
   nullify (intp)
Jan Kratochvil 7306e88
   nullify (intap)
Jan Kratochvil 7306e88
+  nullify (intvlap)
Jan Kratochvil 7306e88
   nullify (realp)
Jan Kratochvil 7306e88
   nullify (twop)
Jan Kratochvil 7306e88
+  nullify (arrayOfPtr(1)%p)
Jan Kratochvil 7306e88
+  nullify (arrayOfPtr(2)%p)
Jan Kratochvil 7306e88
+  nullify (arrayOfPtr(3)%p)
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
   logp => logv    ! Before pointer assignment
Jan Kratochvil 7306e88
   comp => comv
Jan Kratochvil 9faadbe
@@ -53,8 +64,10 @@
Jan Kratochvil 7306e88
   charap => chara
Jan Kratochvil 7306e88
   intp => intv
Jan Kratochvil 7306e88
   intap => inta
Jan Kratochvil 7306e88
+  intvlap => intvla
Jan Kratochvil 7306e88
   realp => realv
Jan Kratochvil 7306e88
   twop => twov
Jan Kratochvil 7306e88
+  arrayOfPtr(2)%p => twov
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
   logv = associated(logp)     ! Before value assignment
Jan Kratochvil 7306e88
   comv = cmplx(1,2)
Jan Kratochvil 9faadbe
@@ -63,6 +76,10 @@
Jan Kratochvil 7306e88
   intv = 10
Jan Kratochvil 7306e88
   inta(:,:) = 1
Jan Kratochvil 7306e88
   inta(3,1) = 3
Jan Kratochvil 7306e88
+  allocate (intvla(10))
Jan Kratochvil 7306e88
+  intvla(:) = 2
Jan Kratochvil 7306e88
+  intvla(4) = 4
Jan Kratochvil 7306e88
+  intvlap => intvla
Jan Kratochvil 7306e88
   realv = 3.14
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
   allocate (twov%ivla1(3))
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/valops.c
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/valops.c	2016-08-07 21:18:44.035409093 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/valops.c	2016-08-07 21:18:51.089474225 +0200
Jan Kratochvil 9faadbe
@@ -1562,6 +1562,19 @@
Jan Kratochvil 7306e88
   if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
Jan Kratochvil 7306e88
     {
Jan Kratochvil 7306e88
       struct type *enc_type;
Jan Kratochvil 7306e88
+      CORE_ADDR addr;
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+      if (type_not_associated (base_type))
Jan Kratochvil 7306e88
+        error (_("Attempt to take contents of a not associated pointer."));
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+      if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (base_type)))
Jan Kratochvil 7306e88
+	addr = value_address (arg1);
Jan Kratochvil 7306e88
+      else
Jan Kratochvil 7306e88
+	addr = value_as_address (arg1);
Jan Kratochvil 7306e88
+
Jan Kratochvil 7306e88
+      if (addr != 0)
Jan Kratochvil 7306e88
+	TYPE_TARGET_TYPE (base_type) =
Jan Kratochvil 7306e88
+	    resolve_dynamic_type (TYPE_TARGET_TYPE (base_type), NULL, addr);
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
       /* We may be pointing to something embedded in a larger object.
Jan Kratochvil 7306e88
          Get the real type of the enclosing object.  */
Jan Kratochvil 9faadbe
@@ -1577,8 +1590,7 @@
Jan Kratochvil 7306e88
       else
Jan Kratochvil 7306e88
 	/* Retrieve the enclosing object pointed to.  */
Jan Kratochvil 7306e88
 	arg2 = value_at_lazy (enc_type, 
Jan Kratochvil 7306e88
-			      (value_as_address (arg1)
Jan Kratochvil 7306e88
-			       - value_pointed_to_offset (arg1)));
Jan Kratochvil 7306e88
+			      (addr - value_pointed_to_offset (arg1)));
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
       enc_type = value_type (arg2);
Jan Kratochvil 7306e88
       return readjust_indirect_value_type (arg2, enc_type, base_type, arg1);
Jan Kratochvil 9faadbe
Index: gdb-7.11.90.20160807/gdb/valprint.c
Jan Kratochvil 9faadbe
===================================================================
Jan Kratochvil 9faadbe
--- gdb-7.11.90.20160807.orig/gdb/valprint.c	2016-08-07 04:00:01.000000000 +0200
Jan Kratochvil 9faadbe
+++ gdb-7.11.90.20160807/gdb/valprint.c	2016-08-07 21:18:51.090474235 +0200
Jan Kratochvil 9faadbe
@@ -1141,12 +1141,6 @@
Jan Kratochvil 7306e88
       return 0;
Jan Kratochvil 7306e88
     }
Jan Kratochvil 7306e88
 
Jan Kratochvil 7306e88
-  if (type_not_associated (value_type (val)))
Jan Kratochvil 7306e88
-    {
Jan Kratochvil 7306e88
-      val_print_not_associated (stream);
Jan Kratochvil 7306e88
-      return 0;
Jan Kratochvil 7306e88
-    }
Jan Kratochvil 7306e88
-
Jan Kratochvil 7306e88
   if (type_not_allocated (value_type (val)))
Jan Kratochvil 7306e88
     {
Jan Kratochvil 7306e88
       val_print_not_allocated (stream);