PR gdb/10884

* value.c (value_primitive_field): Call check_typedef
	on the type.
This commit is contained in:
Vladimir Prus 2009-12-21 09:50:31 +00:00
parent dd0cd0d0e0
commit 9e19b45e2e
5 changed files with 53 additions and 0 deletions

View 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.

View 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,

View 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.

View 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);
}

View 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 */