From: tim@cs.wisc.edu (Tim Theisen)
Subject: "gcc-2.1 -O" breaks gnuplot on romp-ibm-aos
Organization: University of Wisconsin-Madison, Department of Computer Sciences
Distribution: gnu
Date: Mon, 6 Apr 1992 22:26:01 GMT

I know that this is a pretty vague bug report and that it is possible
that gnuplot has bad code.  However, gnuplot has been compiled with
many different C compilers on many different architectures.  Also, gcc on
the RT is still pretty young.  Therefore, I am guessing that the problem
lies with gcc.

When running gnuplot on an RT compiled with gcc-2.1 -O, 2D plots that have
curves with negative y values come out with incorrect axes.  The y axis
either ranges over positive values only or the y axis ranges over huge
(>1e80) numbers.

The program works fine on an RT when compiled with "gcc-2.1 -O0".
It also works fine on a DECstation or SPARC compiled with either gcc or
native cc with or without optimization.

Here are the details:

I am running gcc-2.1 with the following patch:

Tue Mar 31 06:37:50 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

        * expr.c (do_store_flag): Handle case where EXP is a TRUTH_NOT_EXPR.

The source is gnuplot-3.1 which can be fetched from prep.ai.mit.edu.
I have made the following modifications for out local enviroment:

--- 1.1	1992/03/17 23:22:40
+++ gnuplot_x11.c	1992/03/17 23:24:24
@@ -117,7 +117,7 @@
    vchar = (rv.font->ascent + rv.font->descent);
 
    /* add callbacks on input-from-gnuplot-on-stdin & window-resized */
-   XtAddInput(0, XtInputReadMask, gnuplot, NULL);
+   XtAddInput(0, (XtPointer)XtInputReadMask, gnuplot, NULL);
    XtAddEventHandler(w_label, StructureNotifyMask, FALSE, resize, NULL);
 
    XtMainLoop();
@@ -238,7 +238,7 @@
      if (*buf == 'G') {                           /* enter graphics mode */
 	 if (commands) {
 	    int n; for (n=0; n<nc; n++) XtFree(commands[n]);
-	    XtFree(commands);
+	    XtFree((char *)commands);
 	    }
 	 commands = NULL; nc = ncalloc = 0;
          }
@@ -247,7 +247,8 @@
       else {
 	 if (nc >= ncalloc) {
 	    ncalloc = ncalloc*2 + 1;
-	    commands = (String *)XtRealloc(commands, ncalloc * sizeof(String));
+	    commands = (String *)XtRealloc((char *)commands,
+					   ncalloc * sizeof(String));
 	    }
 	 commands[nc++] = XtNewString(buf);
 	 }
--- 1.1	1992/03/17 22:29:39
+++ makefile.unx	1992/03/30 23:46:11
@@ -14,17 +14,20 @@
 
 TARGET = All # What to make by default
 
+
+MAKE = make # for dumb makes
+
 ############################################################
 #>>> Decide where the binaries and manuals will go. 
 # directory where to install executables on 'make install'
-DEST=/usr/local/bin
+DEST=/usr/gnu/bin
 # directory for installing man page on 'make man_install'.
-MANDEST=/usr/man/manl
+MANDEST=/usr/gnu/man/manl
 # where to install help file gnuplot.gih
-HELPDEST=/usr/local/lib/gnuplot.gih
+HELPDEST=/usr/gnu/lib/gnuplot.gih
 #HELPDEST=docs/gnuplot.gih
 # Where to send email about bugs and comments (locally)
-EMAIL=bug-gnuplot%pixar.uucp@sun.com
+EMAIL=lab
 
 ############################################################
 #>>> Choose your C compiler and basic compiler flags.
@@ -45,7 +48,7 @@
 #   If NOCWDRC is defined, then any .gnuplot in the current directory
 #   is not read on startup. This is a security consideration
 #   especially for root users ( we recommend you define -DNOCWDRC ).
-OPTIONS = -DREADLINE -DNOCWDRC
+OPTIONS = -DNOCWDRC
 
 #>>> Optionally install the lasergnu script.
 # Lasergnu is a handy shell script for creating a plot from the
@@ -131,7 +134,7 @@
 
 # Defaults in case the user types 'make All' directly
 # Should match X11R4_FLAGS's CFLAGS definition
-CFLAGS = $(COPTS) $(OPTIONS)
+CFLAGS = $(COPTS) $(OPTIONS) -DGAMMA=lgamma
 
 ############################################################
 # Terminal (device) support
@@ -150,7 +153,7 @@
 # -DUNIXPC      unixpc (ATT 3b1 or ATT 7300)
 # -DUNIXPLOT    unixplot
 # -DX11         X11 Window System (This is $(PLOTXFLAG))
-TERMFLAGS = -Iterm -DUNIXPLOT $(PLOTXFLAG)
+TERMFLAGS = -Iterm $(PLOTXFLAG)
 
 ############################################################
 # Library explanations. 
@@ -161,13 +164,13 @@
 #  -lsuntool -lsunwindow -lpixrect  if you have -DSUN in TERMFLAGS
 #  -lgl_s if -DIRIS4D in TERMFLAGS
 #  -lccgi if -DCGI in TERMFLAGS
-LIBS = -lm -lplot
+LIBS = -lm
 
 ############################################################
 # Machine-dependent settings.
 #
 X11R4_FLAGS = \
-    	   CFLAGS="$(COPTS) $(OPTIONS)" \
+    	   CFLAGS="$(COPTS) $(OPTIONS) -DGAMMA=lgamma" \
     	   LIBS="$(LIBS)" X11FLAGS="$(X11FLAGS)" X11INCLUDES="$(X11INCLUDES)" \
     	   X11LIBS="$(X11LIBS)" \
     	   PLOTXFLAG="$(PLOTXFLAG)" GNUPLOT_X11=$(GNUPLOT_X11) \

I compiled gnuplot with the following commands:

ln -s makefile.unx makefile
make CC=gcc x11r4

I ran the demonstration with the following commands (. needs to be in $PATH):
cd demo
ln -s ../gnuplot_x11 gnuplot_x11
ln -s ../gnuplot gnuplot
gnuplot all.demo

The problem should be apparent.

I don't have time right now to narrow this down.  I just wanted to let
you know of a potential problem.

Good Luck!  ...Tim

          Tim Theisen           Systems Programmer
Internet: tim@cs.wisc.edu       Department of Computer Sciences
    UUCP: uwvax!tim             University of Wisconsin-Madison
   Phone: (608)262-0438         1210 West Dayton Street
     FAX: (608)262-9777         Madison, WI   53706

Newsgroups: gnu.gcc.bug