[gnu.gdb.bug] gdb 3.0 got segmentation fault

how@IRIS.UCDAVIS.EDU (W. Wilson Ho) (01/07/89)

The following bug happens on both Vax and Sun.  The version is 3.0.

Gdb gets a segmentation fault whenever it needs to evaluate a
logical AND or OR operation.  Here is the script:

-------------
GDB 3.0, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /usr/src/test/gdb-3.0/gdb2...done.
Type "help" for a list of commands.
(gdb) r
Starting program: /usr/src/test/gdb-3.0/gdb2
GDB 3.0, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "info copying" to see the conditions.
Type "help" for a list of commands.
(mygdb) print 1||2

Program received signal 11, Segmentation fault
0xe18e in binop_user_defined_p (op=BINOP_OR, arg1=(value) 0x49244, arg2=(value) 0x0) (valarith.c line 113)
(gdb) where
#0  0xe18e in binop_user_defined_p (op=BINOP_OR, arg1=(value) 0x49244, arg2=(value) 0x0) (valarith.c line 113)
#1  0xc13f in evaluate_subexp (expect_type=(struct type *) 0x0, exp=(struct expression *) 0x3c784, pos=(int *) 0x7fffe0bc, noside=EVAL_NORMAL) (eval.c line 509)
#2  0xc13f in evaluate_subexp (expect_type=(struct type *) 0x0, exp=(struct expression *) 0x3c784, pos=(int *) 0x7fffe0bc, noside=EVAL_NORMAL) (eval.c line 509)
#3  0xb6ec in evaluate_expression (exp=(struct expression *) 0x3c784) (eval.c line 121)
#4  0x1095a in print_command (exp=(char *) 0x3c006 "1||2", 1) (printcmd.c line 491)
#5  0xa11 in execute_command (p=(char *) 0x3c006 "1||2", from_tty=1) (main.c line 416)
#6  0xb96 in command_loop () (main.c line 466)
#7  0x8ae in main (argc=1, argv=(char **) 0x7fffe1b4, envp=(char **) 0x7fffe1bc) (main.c line 359)
(gdb) quit
The program is running.  Quit anyway? (y or n) y
-------------

Apparently in evaluate_subexp() in eval.c, under the case BINOP_AND
and BINOP_OR, arg2 was not evaluated before being passed to
binop_user_defined_p() .

Thanks,

Wilson Ho
-------------------------------------------------------------------------------
  W. Wilson Ho		        |  INTERNET: how@iris.ucdavis.edu
  Division of Computer Science	|  UUCP:     {lll-crg, ucbvax}!ucdavis!iris!how
  EECS Department		|
  University of California	|  Phone:    (916)752-7109
  Davis, CA 95616		|
-------------------------------------------------------------------------------