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]

[PATCH] c_value_print: Revert 'val' to a reference for TYPE_CODE_STRUCT


Currently c_value_print will turn struct reference values into pointers before doing
a set of RTTI checks. This was introduced as a fix to PR c++/15401. If there's RTTI
the pointer will be adjusted and converted back to a reference. However, if there's
no RTTI the value will still be treated as a pointer during the remainder of the function.
This patch moves the conversion down so that it's always performed when needed.

I have write access and copyright assignment. Ok to commit?

gdb/ChangeLog:
2016-04-26  Martin Galvan  <martin.galvan@tallertechnologies.com>

	* c-valprint.c (c_value_print): Always convert val back to reference
	type if we converted it to a pointer type.

---
 gdb/c-valprint.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 62552ec..e1da3d5 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -611,7 +611,7 @@ c_value_print (struct value *val, struct ui_file *stream,
 	  fprintf_filtered (stream, "(");
 
 	  if (value_entirely_available (val))
- 	    {
+	    {
 	      real_type = value_rtti_indirect_type (val, &full, &top,
 						    &using_enc);
 	      if (real_type)
@@ -623,18 +623,19 @@ c_value_print (struct value *val, struct ui_file *stream,
 		  val = value_from_pointer (real_type,
 					    value_as_address (val) - top);
 
-		  if (is_ref)
-		    {
-		      val = value_ref (value_ind (val));
-		      type = value_type (val);
-		    }
-
 		  /* Note: When we look up RTTI entries, we don't get
 		     any information on const or volatile
 		     attributes.  */
 		}
 	    }
-          type_print (type, "", stream, -1);
+
+	  if (is_ref)
+	    {
+	      val = value_ref (value_ind (val));
+	      type = value_type (val);
+	    }
+
+	  type_print (type, "", stream, -1);
 	  fprintf_filtered (stream, ") ");
 	  val_type = type;
 	}
-- 
2.8.1


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