2009-03-20 Tom Tromey <tromey@redhat.com>

Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (process_die): Handle DW_TAG_typedef.
	* eval.c (evaluate_subexp_standard) <OP_TYPE>: Strip a single
	typedef.
	* ada-lang.c (decode_packed_array_type): Call CHECK_TYPEDEF on the
	SYMBOL_TYPE result.
	* ada-typeprint.c (print_array_type): Do the NULL check
	unconditionally.
This commit is contained in:
Tom Tromey 2009-03-20 22:00:11 +00:00
parent 4bf27aa9ba
commit cb249c71f6
5 changed files with 30 additions and 6 deletions

View File

@ -1,3 +1,14 @@
2009-03-20 Tom Tromey <tromey@redhat.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (process_die): Handle DW_TAG_typedef.
* eval.c (evaluate_subexp_standard) <OP_TYPE>: Strip a single
typedef.
* ada-lang.c (decode_packed_array_type): Call CHECK_TYPEDEF on the
SYMBOL_TYPE result.
* ada-typeprint.c (print_array_type): Do the NULL check
unconditionally.
2009-03-19 Tom Tromey <tromey@redhat.com>
* utils.c (do_obstack_free): New function.

View File

@ -1783,6 +1783,7 @@ decode_packed_array_type (struct type *type)
return NULL;
}
shadow_type = SYMBOL_TYPE (sym);
CHECK_TYPEDEF (shadow_type);
if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
{

View File

@ -357,16 +357,17 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
bitsize = 0;
fprintf_filtered (stream, "array (");
if (type == NULL)
{
fprintf_filtered (stream, _("<undecipherable array type>"));
return;
}
n_indices = -1;
if (show < 0)
fprintf_filtered (stream, "...");
else
{
if (type == NULL)
{
fprintf_filtered (stream, _("<undecipherable array type>"));
return;
}
if (ada_is_simple_array_type (type))
{
struct type *range_desc_type =

View File

@ -2849,6 +2849,7 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_base_type:
case DW_TAG_subrange_type:
case DW_TAG_typedef:
/* Add a typedef symbol for the type definition, if it has a
DW_AT_name. */
new_symbol (die, read_type_die (die, cu), cu);

View File

@ -2475,7 +2475,17 @@ evaluate_subexp_standard (struct type *expect_type,
if (noside == EVAL_SKIP)
goto nosideret;
else if (noside == EVAL_AVOID_SIDE_EFFECTS)
return allocate_value (exp->elts[pc + 1].type);
{
struct type *type = exp->elts[pc + 1].type;
/* If this is a typedef, then find its immediate target. We
use check_typedef to resolve stubs, but we ignore its
result because we do not want to dig past all
typedefs. */
check_typedef (type);
if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
type = TYPE_TARGET_TYPE (type);
return allocate_value (type);
}
else
error (_("Attempt to use a type name as an expression"));