Undid previous delta to dbxout.c
authorNick Clifton <nickc@cygnus.com>
Mon, 18 May 1998 15:34:05 +0000 (15:34 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Mon, 18 May 1998 15:34:05 +0000 (15:34 +0000)
Added comment explaining why.

From-SVN: r19855

gcc/ChangeLog
gcc/dbxout.c

index 5d298e8..d8e83c5 100644 (file)
@@ -1,3 +1,8 @@
+Mon May 18 15:30:42 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * dbxout.c (dbxout_parms): Revert to using DECL_ARG_TYPE.  Add
+       comment explaining why.
+
 Mon May 18 13:20:23 1998  Richard Henderson  <rth@cygnus.com>
 
        * tree.h (TYPE_SIZE_UNIT): New.
index fac184e..f3cb7ed 100644 (file)
@@ -2274,7 +2274,21 @@ dbxout_parms (parms)
                         DBX_MEMPARM_STABS_LETTER);
              }
 
-           dbxout_type (TREE_TYPE (parms), 0, 0);
+           /* It is quite tempting to use:
+              
+                  dbxout_type (TREE_TYPE (parms), 0, 0);
+
+              as the next statement, rather than using DECL_ARG_TYPE(), so
+              that gcc reports the actual type of the parameter, rather
+              than the promoted type.  This certainly makes GDB's life
+              easier, at least for some ports.  The change is a bad idea
+              however, since GDB expects to be able access the type without
+              performing any conversions.  So for example, if we were
+              passing a float to an unprototyped function, gcc will store a
+              double on the stack, but if we emit a stab saying the type is a
+              float, then gdb will only read in a single value, and this will
+              produce an erropneous value.  */
+           dbxout_type (DECL_ARG_TYPE (parms), 0, 0);
            current_sym_value = DEBUGGER_ARG_OFFSET (current_sym_value, addr);
            dbxout_finish_symbol (parms);
          }