This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

FYI: value_from_pointer: remove call to resolve_dynamic_type


Hello,

FYI, I am about to apply the following patch to HEAD.

The reason I stumbled upon it is because I was trying to see how
difficult (in terms of number of changes), it would be to add some
extra contextual data to the resolve_dynamic* functions. That when
I noticed that value_from_pointer calls resolve_dynamic_type, and
I couldn't figure out, from a logical standpoint, why that was
necessary. If any resolution is actually needed, it seems to me
that this resolution should be done when dereferencing the pointer,
and it just so happens to be the case already.

Furthermore, just operating from a pratical perspective, it turns out
that the given type always being a TYPE_CODE_PTR, it should really
never be dynamic, and making the call to resolve_dynamic_type an
unnecessary no-op.

So this patch removes this call.

gdb/ChangeLog:

        * value.c (value_from_pointer): Remove use of resolve_dynamic_type.
        Adjust code accordingly.  Adjust function description comment.

Tested on x86_64-linux. Pushing...

---
 gdb/ChangeLog | 5 +++++
 gdb/value.c   | 9 +++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7c3c582..5d446ab 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-19  Joel Brobecker  <brobecker@adacore.com>
+
+	* value.c (value_from_pointer): Remove use of resolve_dynamic_type.
+	Adjust code accordingly.  Adjust function description comment.
+
 2014-08-19  Alan Modra  <amodra@gmail.com>
 
 	* acinclude.m4 (GDB_AC_CHECK_BFD): Don't add -ldl.
diff --git a/gdb/value.c b/gdb/value.c
index 3d460bd..cec1d4a 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3342,18 +3342,15 @@ value_from_ulongest (struct type *type, ULONGEST num)
 
 
 /* Create a value representing a pointer of type TYPE to the address
-   ADDR.  The type of the created value may differ from the passed
-   type TYPE. Make sure to retrieve the returned values's new type
-   after this call e.g. in case of an variable length array.  */
+   ADDR.  */
 
 struct value *
 value_from_pointer (struct type *type, CORE_ADDR addr)
 {
-  struct type *resolved_type = resolve_dynamic_type (type, addr);
-  struct value *val = allocate_value (resolved_type);
+  struct value *val = allocate_value (type);
 
   store_typed_address (value_contents_raw (val),
-		       check_typedef (resolved_type), addr);
+		       check_typedef (type), addr);
   return val;
 }
 
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]