Wrong type description for tagged type parameter.
authorJoel Brobecker <brobecker@gnat.com>
Tue, 9 Feb 2010 13:15:10 +0000 (13:15 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 9 Feb 2010 13:15:10 +0000 (13:15 +0000)
        * ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: When noside is
        EVAL_AVOID_SIDE_EFFECTS, also handle the case when type is a
        reference to a tagged type.

gdb/ChangeLog
gdb/ada-lang.c

index ceb22c0c9461b10d488765fa6ed9334b73db6a40..cbaeb4bdb118fcfb25b1475efc495f48c1d9d0c7 100644 (file)
@@ -1,3 +1,10 @@
+2010-02-09  Joel Brobecker  <brobecker@adacore.com>
+
+       Wrong type description for tagged type parameter.
+       * ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: When noside is
+       EVAL_AVOID_SIDE_EFFECTS, also handle the case when type is a
+       reference to a tagged type.
+
 2010-02-09  Tristan Gingold  <gingold@adacore.com>
 
        * objfiles.c (objfile_separate_debug_iterate): Do not iterate on
index 40b70ab5cc72e0e75574abc5b2929002d8227c7d..7a2d2ca84e194d79cd4ee648a196f1f05ccba481 100644 (file)
@@ -8906,7 +8906,14 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
         {
           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
-          if (ada_is_tagged_type (type, 0))
+          /* Check to see if this is a tagged type.  We also need to handle
+             the case where the type is a reference to a tagged type, but
+             we have to be careful to exclude pointers to tagged types.
+             The latter should be shown as usual (as a pointer), whereas
+             a reference should mostly be transparent to the user.  */
+          if (ada_is_tagged_type (type, 0)
+              || (TYPE_CODE(type) == TYPE_CODE_REF
+                  && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
           {
             /* Tagged types are a little special in the fact that the real
                type is dynamic and can only be determined by inspecting the