[Python-Dev] Re: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.207,2.208

Fred L. Drake, Jr. fdrake@beopen.com
Wed, 11 Oct 2000 09:42:57 -0400 (EDT)


Tim Peters writes:
 > Update of /cvsroot/python/python/dist/src/Python
 > Attempt to fix bogus gcc -Wall warnings reported by Marc-Andre Lemburg,
 > by making the DUP_TOPX code utterly straightforward.  This also gets rid
 > of all normal-case internal DUP_TOPX if/branches, and allows replacing one
 > POP() with TOP() in each case, so is a good idea regardless.

Tim,
  There's still one left:

gcc -Wall -O2 -Wstrict-prototypes -I../../Python/../Include -I.. -DHAVE_CONFIG_H   -c -o ceval.o ../../Python/ceval.c
../../Python/ceval.c: In function `eval_code2':
../../Python/ceval.c:346: warning: `w' might be used uninitialized in
this function

  Cruising through this code, it looks like the problem might be in
the PRINT_NEWLINE case:

		case PRINT_NEWLINE:
			if (stream == NULL || stream == Py_None) {
				w = PySys_GetObject("stdout");
				if (w == NULL)
					PyErr_SetString(PyExc_RuntimeError,
							"lost sys.stdout");
			}
			if (w != NULL) {
	/* If PRINT_NEWLINE is the opcode, w might not be initialized
         * here (I think), since I don't see it initialize before the
         * switch.  Since we can't initialize it to NULL with the case
         * (doing so would break the PRINT_NEWLINE_TO case), it would
         * have to be initialized before the main loop is entered.
         */
				err = PyFile_WriteString("\n", w);
				if (err == 0)
					PyFile_SoftSpace(w, 0);
			}
			Py_XDECREF(stream);
			stream = NULL;
			break;

  Ok.... yep, initializing that seems to work.
  I'll check in the fix for this one after I've run the regression test.


  -Fred

-- 
Fred L. Drake, Jr.  <fdrake at beopen.com>
BeOpen PythonLabs Team Member