From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Ingham To: gdb-patches@sources.redhat.com Subject: Trivial bug in valarith.c Date: Fri, 12 Oct 2001 22:18:00 -0000 Message-id: X-SW-Source: 2001-10/msg00186.html Hi, all... There's a trivial bug in valarith.c, in value_sub. Here is the patch: Index: valarith.c =================================================================== RCS file: /cvs/src/src/gdb/valarith.c,v retrieving revision 1.9 diff -c -w -r1.9 valarith.c *** valarith.c 2001/09/24 17:16:53 1.9 --- valarith.c 2001/10/13 05:03:06 *************** *** 104,110 **** { /* pointer - integer. */ LONGEST sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1))); ! return value_from_pointer (VALUE_TYPE (arg1), (value_as_pointer (arg1) - (sz * value_as_long (arg2)))); } --- 104,110 ---- { /* pointer - integer. */ LONGEST sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1))); ! return value_from_pointer (type1, (value_as_pointer (arg1) - (sz * value_as_long (arg2)))); } You need to pass the type that has passed through check_typedef (that's what type1 is) rather than VALUE_TYPE(arg1) or you might pass a typedef to value_from_pointer, which will then issue a scary internal error warning. Here is an example that will show this: $cat test.c typedef char * charPtr; main () { charPtr myPtr = (charPtr) "some data"; printf("Stupid thing to do, huh?\n"); } $ cc -g -o test test.c $ gdb test GNU gdb 5.0-20001113 (Apple version gdb-200) (Mon Sep 3 02:43:52 GMT 2001) (UI_OUT) Copyright 2000 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "powerpc-apple-macos10". Reading symbols for shared libraries .. done (gdb) break main Breakpoint 1 at 0x1e80: file test.c, line 4. (gdb) run Starting program: /tmp/test [Switching to thread 1 (process 5994 thread 0x1603)] Breakpoint 1, main () at test.c:4 4 charPtr myPtr = (charPtr) "some data"; (gdb) n 6 printf("Stupid thing to do, huh?\n"); (gdb) x/4x myPtr-4 gdb-internal-error: findvar.c (store_typed_address): type is not a pointer or reference Jim _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- Jim Ingham jingham@apple.com Developer Tools - gdb