Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!rpi!crdgw1!crdos1!davidsen
From: davidsen@crdos1.crd.ge.COM (Wm E Davidsen Jr)
Newsgroups: comp.std.c
Subject: Re: volatile required?
Summary: Answer not on question topic
Message-ID: <684@crdos1.crd.ge.COM>
Date: 2 Oct 89 15:25:16 GMT
References: <712@Aragorn.dde.dk> <16785@watdragon.waterloo.edu>
Reply-To: davidsen@crdos1.UUCP (bill davidsen)
Organization: GE Corp R&D Center
Lines: 32

In article <16785@watdragon.waterloo.edu>, afscian@violet.waterloo.edu (Anthony Scian) writes:
|  In article <712@Aragorn.dde.dk> ct@dde.dk (Claus Tondering) writes:
|  >Consider the following program:
|  >
|  >	main()
|  >	{
|  >	  int p=3, *q=&p;
|  >
|  >	  *q=4;
|  >	  printf("%d\n",p);
|  >	}
|  >
|  >Is it acceptable that this program prints 3 instead of 4? 
|
|  NO. This is a convenient type of oversight that allows so called
|  "optimizing compilers" like Turbo C and Microsoft C to squeeze
|  out extra performance from benchmarks. Too bad if production code
|  doesn't run with the optimizer turned on. True optimizing
|  compilers (WATCOM C,GNU CC) don't resort to "tricks" like this.

  You are correct that 3 is not acceptable, but what in the world has
the original topic to do with the attack on MSC and TC? I don't know
about TC, but I tried MSC on the program as posted and it doesn't have
any such problem.

  I do not have easy access to old versions of MSC or TC, so I can speak
only to the receent (4.85, 5.0, 5.1) MSC. Those version correctly print 4.
-- 
bill davidsen	(davidsen@crdos1.crd.GE.COM -or- uunet!crdgw1!crdos1!davidsen)
"The world is filled with fools. They blindly follow their so-called
'reason' in the face of the church and common sense. Any fool can see
that the world is flat!" - anon