OSDN Git Service

PR gdb/10884
authorvprus <vprus>
Mon, 21 Dec 2009 18:50:26 +0000 (18:50 +0000)
committervprus <vprus>
Mon, 21 Dec 2009 18:50:26 +0000 (18:50 +0000)
* value.c (value_primitive_field): Call check_typedef
on the type.

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/mi-var-cmd.exp
gdb/testsuite/gdb.mi/var-cmd.c
gdb/value.c

index 5356d24..3ba2640 100644 (file)
@@ -1,3 +1,10 @@
+2009-12-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+       PR gdb/10884
+
+       * value.c (value_primitive_field): Call check_typedef
+       on the type.
+
 2009-12-21  Joel Brobecker  <brobecker@adacore.com>
 
        * COPYING: Update to GPL version 3.
index 180dc87..62eb4aa 100644 (file)
@@ -1,3 +1,11 @@
+2009-12-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+       PR gdb/10884
+
+       * gdb.mi/var-cmd.c (do_bitfield_tests): New
+       (main): Call do_bitfield_tests.
+       * gdb.mi/mi-cmd-var.exp: Run the 'bitfield' testcase.
+
 2009-12-20  Joel Brobecker  <brobecker@adacore.com>
 
        * Makefile.in gdb.ada/gnat_ada.gpr, gdb.base/gcore-buffer-overflow.c,
index 6efb333..4cb2552 100644 (file)
@@ -577,6 +577,8 @@ proc set_frozen {varobjs flag} {
 mi_prepare_inline_tests $srcfile
 mi_run_inline_test frozen
 
+mi_run_inline_test bitfield
+
 # Since the inline test framework does not really work with
 # function calls, first to inline tests and then do the reminder
 # manually.
index 6372f64..bbadc24 100644 (file)
@@ -468,6 +468,40 @@ void do_at_tests ()
   /*: END: floating :*/
 }
 
+/* Some header appear to define uint already, so apply some
+   uglification.  Note that without uglification, the compile
+   does not fail, rather, we don't test what we want because
+   something else calls check_typedef on 'uint' already.  */
+typedef unsigned int uint_for_mi_testing;
+
+struct Data {
+  int alloc;
+  uint_for_mi_testing sharable : 4;
+};
+
+/* Accessing a value of a bitfield whose type is a typed used to
+   result in division by zero.  See:
+
+         http://sourceware.org/bugzilla/show_bug.cgi?id=10884
+
+   This tests for this bug.  */
+
+void do_bitfield_tests ()
+{
+  /*: BEGIN: bitfield :*/
+  struct Data d = {0, 3};
+  /*:
+    mi_create_varobj V d "create varobj for Data"
+    mi_list_varobj_children "V" {
+        {"V.alloc" "alloc" "0" "int"}
+        {"V.sharable" "sharable" "0" "unsigned int"}
+    } "list children of Data"
+    mi_check_varobj_value V.sharable 3 "access bitfield"
+    :*/
+  return;
+  /*: END: bitfield :*/  
+}
+
 int
 main (int argc, char *argv [])
 {
@@ -477,6 +511,7 @@ main (int argc, char *argv [])
   do_special_tests ();
   do_frozen_tests ();
   do_at_tests ();
+  do_bitfield_tests ();
   exit (0);
 }
 
index 589e03b..e240c7a 100644 (file)
@@ -1873,6 +1873,7 @@ value_primitive_field (struct value *arg1, int offset,
 
   CHECK_TYPEDEF (arg_type);
   type = TYPE_FIELD_TYPE (arg_type, fieldno);
+  type = check_typedef (type);
 
   /* Handle packed fields */