Wrong function used to perform address addition/subtraction.
authorJoel Brobecker <brobecker@gnat.com>
Thu, 19 Nov 2009 22:37:35 +0000 (22:37 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 19 Nov 2009 22:37:35 +0000 (22:37 +0000)
    * ada-lang.c (ada_type_match): Stop making TYPE_CODE_VOID
    a wildcard matching any type.  For types that we don't already
    handle specifically, make sure that both types have the same code.

gdb/ChangeLog
gdb/ada-lang.c

index a5b4260dfe4cdf918f677e0b581407d555183abb..1a74a3b713847834bb1ccefad63f3995133891dd 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-19  Joel Brobecker  <brobecker@adacore.com>
+
+       Wrong function used to perform address addition/subtraction.
+       * ada-lang.c (ada_type_match): Stop making TYPE_CODE_VOID
+       a wildcard matching any type.  For types that we don't already
+       handle specifically, make sure that both types have the same code.
+
 2009-11-19  Joel Brobecker  <brobecker@adacore.com>
 
        * ada-lang.c (ada_decode): Add handling of "TB" suffixes for
index 06aaadc327bc6c9f178ae4bef74435d72dfb180e..74336d83340daa5f587a9813c212ad7ad24495bb 100644 (file)
@@ -2977,10 +2977,9 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
 
 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
    MAY_DEREF is non-zero, the formal may be a pointer and the actual
-   a non-pointer.   A type of 'void' (which is never a valid expression type)
-   by convention matches anything. */
+   a non-pointer.  */
 /* The term "match" here is rather loose.  The match is heuristic and
-   liberal.  FIXME: TOO liberal, in fact.  */
+   liberal.  */
 
 static int
 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
@@ -2993,14 +2992,10 @@ ada_type_match (struct type *ftype, struct type *atype, int may_deref)
   if (TYPE_CODE (atype) == TYPE_CODE_REF)
     atype = TYPE_TARGET_TYPE (atype);
 
-  if (TYPE_CODE (ftype) == TYPE_CODE_VOID
-      || TYPE_CODE (atype) == TYPE_CODE_VOID)
-    return 1;
-
   switch (TYPE_CODE (ftype))
     {
     default:
-      return 1;
+      return TYPE_CODE (ftype) == TYPE_CODE (atype);
     case TYPE_CODE_PTR:
       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
         return ada_type_match (TYPE_TARGET_TYPE (ftype),