* ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: For tagged
authorJoel Brobecker <brobecker@gnat.com>
Fri, 13 Mar 2009 00:57:52 +0000 (00:57 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Fri, 13 Mar 2009 00:57:52 +0000 (00:57 +0000)
        types, if we are unable to determine the actual symbol type
        from its tag, then use the static approximation instead.

gdb/ChangeLog
gdb/ada-lang.c

index 7ddb7d1..d3e9c2c 100644 (file)
@@ -1,5 +1,11 @@
 2009-03-12  Joel Brobecker  <brobecker@adacore.com>
 
+       * ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: For tagged
+       types, if we are unable to determine the actual symbol type
+       from its tag, then use the static approximation instead.
+
+2009-03-12  Joel Brobecker  <brobecker@adacore.com>
+
        Fix crash printing packed record with packed array.
 
        * ada-lang.c (ada_modulus_from_name): New function.
index 6988594..0724804 100644 (file)
@@ -8576,8 +8576,19 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
                a fixed type would result in the loss of that type name,
                thus preventing us from printing the name of the ancestor
                type in the type description.  */
+            struct type *actual_type;
+
             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
-            return value_zero (type_from_tag (ada_value_tag (arg1)), not_lval);
+            actual_type = type_from_tag (ada_value_tag (arg1));
+            if (actual_type == NULL)
+              /* If, for some reason, we were unable to determine
+                 the actual type from the tag, then use the static
+                 approximation that we just computed as a fallback.
+                 This can happen if the debugging information is
+                 incomplete, for instance.  */
+              actual_type = type;
+
+            return value_zero (actual_type, not_lval);
           }
 
           *pos += 4;