OSDN Git Service

Wrong function used to perform address addition/subtraction.
authorbrobecke <brobecke>
Fri, 20 Nov 2009 07:37:35 +0000 (07:37 +0000)
committerbrobecke <brobecke>
Fri, 20 Nov 2009 07:37:35 +0000 (07: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 a5b4260..1a74a3b 100644 (file)
@@ -1,5 +1,12 @@
 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
        task bodies.  
 
index 06aaadc..74336d8 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),