rfg@MCC.COM (Ron Guilmette) (02/01/89)
The following short program prints FAILED when compiled using either
GCC 1.32 or G++ 1.32.0 and (only) when the -O option is used. This
occurs on a Sun3 with the following links:
tm-sun3.h => tm.h
xm-m68k.h => config.h
m68k.md => md
output-m68k.c => aux-output.c
I believe that this program also illustrates the need for warnings
(in both G++ and GCC) whenever a value of a given width is implicitly
cast to a value of a smaller width (e.g. int to short int). Such
implicit casts can cause a loss of information, and they should be
flagged as dangerous via warnings. It appears that even with -Wall,
such situations are not being flagged with warnings.
// Ron Guilmette - MCC - Experimental (parallel) Systems Kit Project
// 3500 West Balcones Center Drive, Austin, TX 78759 - (512)338-3740
// ARPA: rfg@mcc.com
// UUCP: {rutgers,uunet,gatech,ames,pyramid}!cs.utexas.edu!pp!rfg
/* ------------------------------------------------------------------------- */
/*
Description - check that when an int value is assigned to a short int,
the proper half of the int (i.e. the low order half) ends
up in the short.
This fails with 1.32.0 if -O is used and f1() is inline.
Workaround - declare "f1_arg" as type "short int".
*/
short int v2;
int v1 = 0x11117777;
inline void f1 (int f1_arg)
{
v2 = f1_arg;
}
void test()
{
f1 (v1);
if (v2 != 0x00007777) {
printf ("v2 = 0x%08x\n", v2);
printf ("FAILED - assignment of int to short does not work right\n");
exit (0);
}
}
main()
{
test ();
printf ("PASSED\n");
exit (0);
}paul@UUNET.UU.NET (Paul Hudson) (02/01/89)
The warning that Ron Guilmette wants (implicit narrowing) is on my list to do, so if the FSF aren't going to do it, and I find time ;-) it will appear eventually. As before, suggestions of futher warnings welcome. Paul Hudson Snail mail: Monotype ADG Email: ...!ukc!acorn!moncam!paul Science Park, paul@moncam.co.uk Milton Road, "Sun Microsysytems: Cambridge, The Company is Arrogant (TM)" CB4 4FQ
schmidt@crimee.ics.uci.edu (Doug Schmidt) (02/03/89)
In article <8902010855.AA06237@marvin.moncam.uucp> mcvax!moncam!paul@UUNET.UU.NET (Paul Hudson) writes: ++ ++As before, suggestions of futher warnings welcome. ++Paul Hudson ++ Here's a useful warning we could use in gcc and g++, given that it is now possible to declare ``const'' functions (read gcc.texinfo for gcc 1.33 for details). Imagine the following perverse program: ---------------------------------------- int external = 10; int bar () { external++; } const int foo (int *i) { bar(); return (external = *i = 10); } void main () { external = foo(&external) + external; } ---------------------------------------- Function foo violates just about all the restrictions on const functions, since it references global variables, changes its parameters, and calls a non-const function. However, gcc doesn't complain about this, yet. It would be nice to have a -W option that detected these transgressions. Doug -- schmidt@ics.uci.edu (ARPA) | Per me si va nella citta' dolente. office: (714) 856-4043 | Per me si va nell'eterno dolore. | Per me si va tra la perduta gente. | Lasciate ogni speranza o voi ch'entrate.