Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Sanimir Agovic <sanimir.agovic@intel.com>
To: tromey@redhat.com, brobecker@adacore.com
Cc: keven.boell@intel.com, gdb-patches@sourceware.org
Subject: [PATCH v5 06/15] vla: update type from newly created value
Date: Thu, 06 Feb 2014 16:28:00 -0000	[thread overview]
Message-ID: <1391704056-25246-7-git-send-email-sanimir.agovic@intel.com> (raw)
In-Reply-To: <1391704056-25246-1-git-send-email-sanimir.agovic@intel.com>

Constructing a value based on a type and address might change the type
of the newly constructed value. Thus re-fetch type via value_type to ensure
we have the correct type at hand.

2013-10-18  Sanimir Agovic  <sanimir.agovic@intel.com>
            Keven Boell  <keven.boell@intel.com>

	* ada-lang.c (ada_value_primitive_packed_val): Re-fetch type from value.
	(ada_template_to_fixed_record_type_1): Likewise.
	(ada_to_fixed_type_1): Likewise.
	* cp-valprint.c (cp_print_value_fields_rtti): Likewise.
	(cp_print_value): Likewise.
	* d-valprint.c (dynamic_array_type): Likewise.
	* jv-valprint.c (java_value_print): Likewise.
	* valops.c (value_ind): Likewise.
	* value.c (coerce_ref): Likewise.


Signed-off-by: Sanimir Agovic <sanimir.agovic@intel.com>
---
 gdb/ada-lang.c    | 13 +++++++++++--
 gdb/cp-valprint.c |  2 ++
 gdb/d-valprint.c  |  1 +
 gdb/jv-valprint.c |  1 +
 gdb/valops.c      |  3 +++
 gdb/value.c       |  1 +
 6 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 0d93267..14cdeb2 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -2300,6 +2300,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
     {
       v = value_at (type, value_address (obj));
+      type = value_type (v);
       bytes = (unsigned char *) alloca (len);
       read_memory (value_address (v) + offset, bytes, len);
     }
@@ -7657,6 +7658,7 @@ ada_template_to_fixed_record_type_1 (struct type *type,
 		 size first before creating the value.  */
 	      check_size (rtype);
 	      dval = value_from_contents_and_address (rtype, valaddr, address);
+	      rtype = value_type (dval);
 	    }
           else
             dval = dval0;
@@ -7759,7 +7761,10 @@ ada_template_to_fixed_record_type_1 (struct type *type,
       off = TYPE_FIELD_BITPOS (rtype, variant_field);
 
       if (dval0 == NULL)
-        dval = value_from_contents_and_address (rtype, valaddr, address);
+	{
+	  dval = value_from_contents_and_address (rtype, valaddr, address);
+	  rtype = value_type (dval);
+	}
       else
         dval = dval0;
 
@@ -7900,7 +7905,10 @@ to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
     return type;
 
   if (dval0 == NULL)
-    dval = value_from_contents_and_address (type, valaddr, address);
+    {
+      dval = value_from_contents_and_address (type, valaddr, address);
+      type = value_type (dval);
+    }
   else
     dval = dval0;
 
@@ -8198,6 +8206,7 @@ ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
 	      value_from_contents_and_address (fixed_record_type,
 					       valaddr,
 					       address);
+            fixed_record_type = value_type (obj);
             if (real_type != NULL)
               return to_fixed_record_type
 		(real_type, NULL,
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index bcf54ff..b868d37 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -443,6 +443,7 @@ cp_print_value_fields_rtti (struct type *type,
       /* Ugh, we have to convert back to a value here.  */
       value = value_from_contents_and_address (type, valaddr + offset,
 					       address + offset);
+      type = value_type (value);
       /* We don't actually care about most of the result here -- just
 	 the type.  We already have the correct offset, due to how
 	 val_print was initially called.  */
@@ -545,6 +546,7 @@ cp_print_value (struct type *type, struct type *real_type,
 		  base_val = value_from_contents_and_address (baseclass,
 							      buf,
 							      address + boffset);
+		  baseclass = value_type (base_val);
 		  thisoffset = 0;
 		  boffset = 0;
 		  thistype = baseclass;
diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
index 6e9c28d..cca629a 100644
--- a/gdb/d-valprint.c
+++ b/gdb/d-valprint.c
@@ -59,6 +59,7 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr,
 
       true_type = lookup_array_range_type (true_type, 0, length - 1);
       ival = value_at (true_type, addr);
+      true_type = value_type (ival);
 
       d_val_print (true_type,
 		   value_contents_for_printing (ival),
diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c
index f465ca0..808e01b 100644
--- a/gdb/jv-valprint.c
+++ b/gdb/jv-valprint.c
@@ -65,6 +65,7 @@ java_value_print (struct value *val, struct ui_file *stream,
 	  type = lookup_pointer_type (type);
 
 	  val = value_at (type, address);
+	  type = value_type (val);
 	}
     }
 
diff --git a/gdb/valops.c b/gdb/valops.c
index a7260b9..270cbef 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -268,6 +268,7 @@ value_cast_structs (struct type *type, struct value *v2)
 	{
 	  v = value_full_object (v2, real_type, full, top, using_enc);
 	  v = value_at_lazy (real_type, value_address (v));
+	  real_type = value_type (v);
 
 	  /* We might be trying to cast to the outermost enclosing
 	     type, in which case search_struct_field won't work.  */
@@ -803,6 +804,7 @@ value_dynamic_cast (struct type *type, struct value *arg)
     return value_at_lazy (type, addr);
 
   tem = value_at (type, addr);
+  type = value_type (tem);
 
   /* The first dynamic check specified in 5.2.7.  */
   if (is_public_ancestor (arg_type, TYPE_TARGET_TYPE (resolved_type)))
@@ -1617,6 +1619,7 @@ value_ind (struct value *arg1)
 			      (value_as_address (arg1)
 			       - value_pointed_to_offset (arg1)));
 
+      enc_type = value_type (arg2);
       return readjust_indirect_value_type (arg2, enc_type, base_type, arg1);
     }
 
diff --git a/gdb/value.c b/gdb/value.c
index 12726a1..7e6e0e7 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3362,6 +3362,7 @@ coerce_ref (struct value *arg)
   retval = value_at_lazy (enc_type,
                           unpack_pointer (value_type (arg),
                                           value_contents (arg)));
+  enc_type = value_type (retval);
   return readjust_indirect_value_type (retval, enc_type,
                                        value_type_arg_tmp, arg);
 }
-- 
1.8.4.2


  parent reply	other threads:[~2014-02-06 16:27 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-06 16:27 [PATCH v5 00/15] C99 variable length array support Sanimir Agovic
2014-02-06 16:27 ` [PATCH v5 11/15] test: cover subranges with present DW_AT_count attribute Sanimir Agovic
2014-02-28 17:52   ` Joel Brobecker
2014-02-06 16:27 ` [PATCH v5 04/15] vla: enable sizeof operator to work with variable length arrays Sanimir Agovic
2014-02-06 16:27 ` [PATCH v5 08/15] vla: support for DW_AT_count Sanimir Agovic
2014-02-28 16:53   ` Joel Brobecker
2014-03-12 13:51     ` Agovic, Sanimir
2014-03-13 15:36       ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 07/15] vla: print "variable length" for unresolved dynamic bounds Sanimir Agovic
2014-02-06 16:28 ` [PATCH v5 14/15] test: basic c99 vla tests for C primitives Sanimir Agovic
2014-02-28 18:04   ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 02/15] vla: introduce new bound type abstraction adapt uses Sanimir Agovic
2014-02-06 16:28 ` Sanimir Agovic [this message]
2014-02-06 16:28 ` [PATCH v5 15/15] test: add mi vla test Sanimir Agovic
2014-02-28 18:07   ` Joel Brobecker
2014-03-12 12:53     ` Agovic, Sanimir
2014-02-06 16:28 ` [PATCH v5 01/15] refactoring: rename create_range_type to create_static_range_type Sanimir Agovic
2014-02-27 22:03   ` Joel Brobecker
2014-02-28 11:02     ` Agovic, Sanimir
2014-02-06 16:28 ` [PATCH v5 10/15] vla: evaluate operand of sizeof if its type is a vla Sanimir Agovic
2014-02-28 17:37   ` Joel Brobecker
2014-03-19 12:55     ` Agovic, Sanimir
2014-03-19 15:12       ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 05/15] vla: enable sizeof operator for indirection Sanimir Agovic
2014-02-06 16:28 ` [PATCH v5 13/15] test: evaluate pointers to C99 vla correctly Sanimir Agovic
2014-02-28 18:01   ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 03/15] type: add c99 variable length array support Sanimir Agovic
2014-02-28 16:27   ` Joel Brobecker
2014-04-08  6:41     ` Agovic, Sanimir
2014-04-08 12:49       ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 12/15] test: multi-dimensional c99 vla Sanimir Agovic
2014-02-28 17:58   ` Joel Brobecker
2014-02-06 16:28 ` [PATCH v5 09/15] vla: resolve dynamic bounds if value contents is a constant byte-sequence Sanimir Agovic
2014-02-07 10:27   ` Joel Brobecker
2014-02-07 12:27     ` Agovic, Sanimir
2014-02-28 17:09   ` Joel Brobecker
2014-03-12 13:40     ` Agovic, Sanimir
2014-03-13 16:00     ` Joel Brobecker
2014-03-19 15:35       ` Agovic, Sanimir
2014-02-09  3:49 ` [PATCH v5 00/15] C99 variable length array support Joel Brobecker
2014-02-10  4:33   ` Joel Brobecker
2014-02-17 20:22     ` Joel Brobecker
2014-02-26 14:05     ` Joel Brobecker
2014-03-03 16:51       ` Agovic, Sanimir
2014-02-28 18:13 ` status update: " Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1391704056-25246-7-git-send-email-sanimir.agovic@intel.com \
    --to=sanimir.agovic@intel.com \
    --cc=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=keven.boell@intel.com \
    --cc=tromey@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox