Tom Lane <[email protected]> wrote:

> That is a serious compiler bug which you should file with your
> distro forthwith.

I distilled it down to the simplest case I could find which failed
to produce the warning; attached. Do you agree that it is a
compiler bug that this generates no warning?

Compile lines used:

gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels
-Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
-fwrapv -fexcess-precision=standard -g -D_GNU_SOURCE -c -o
warning_test.o warning_test.c -MMD -MP

clang -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels
-Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
-fwrapv -g -D_GNU_SOURCE -c -o warning_test.o warning_test.c -MMD
-MP

It is probably significant that if I simplify the while loop
condition to just use one variable I do get the warning.

> It definitely does show up with what I'm using:
>         gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)

The warning shows up, or the bug does?

> It might be worth trawling the buildfarm records to see which
> compilers did or didn't warn before.

I'll get this filed first with the version I'm using, then look
around to see if there is anything else to report.

--
Kevin Grittner
EDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
int test_warnings(int x, int y, int z);


int
test_warnings(int x, int y, int z)
{
	int i;
	
	switch (x)
	{
		case 1:
			if (y != z)
			{
				i = (y < z) ? -1 : 1;
			}
			break;
		case 2:
			if (y != z)
			{
				i = (y < z) ? -1 : 1;
			}
			break;
		default:
			return 0;
	}
	return i;
}
-- 
Sent via pgsql-committers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

Reply via email to