This is the mail archive of the gdb-prs@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]

[Bug exp/17904] "Cannot access memory at address 0x0" for function returning reference evaluated within EVAL_AVOID_SIDE_EFFECTS


https://sourceware.org/bugzilla/show_bug.cgi?id=17904

--- Comment #1 from Ed Catmur <ed at catmur dot co.uk> ---
Here's a test:

gdb/testsuite/gdb.cp/pr17904.cc

int&
func ()
{
  static int i;
  return i;
}

int
main ()
{
}

gdb/testsuite/gdb.cp/pr17904.exp

if {[skip_cplus_tests]} { continue }

standard_testfile .cc

if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
    return -1
}

if {![runto_main]} {
    return -1
}

gdb_test "p 0 || +func()" ".* = false" "reference return"

And a suggested patch (works, but I'm not too sure about correctness):

--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3650,6 +3650,7 @@ coerce_ref (struct value *arg)
 {
   struct type *value_type_arg_tmp = check_typedef (value_type (arg));
   struct value *retval;
+  CORE_ADDR addr;
   struct type *enc_type;

   retval = coerce_ref_if_computed (arg);
@@ -3662,9 +3663,12 @@ coerce_ref (struct value *arg)
   enc_type = check_typedef (value_enclosing_type (arg));
   enc_type = TYPE_TARGET_TYPE (enc_type);

-  retval = value_at_lazy (enc_type,
-                          unpack_pointer (value_type (arg),
-                                          value_contents (arg)));
+  addr = unpack_pointer (value_type (arg), value_contents (arg));
+
+  if (VALUE_LVAL (arg) == not_lval && addr == 0)
+    return allocate_value (enc_type);
+
+  retval = value_at_lazy (enc_type, addr);
   enc_type = value_type (retval);
   return readjust_indirect_value_type (retval, enc_type,
                                        value_type_arg_tmp, arg);

-- 
You are receiving this mail because:
You are on the CC list for the bug.


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