Article View: gnu.g++.bug
Article #297g++ -Wall produces incorrect 'defined but not used' warnings
From: Donn Seeley
Date: Wed, 26 Jul 1989 06:33
Date: Wed, 26 Jul 1989 06:33
65 lines
2387 bytes
2387 bytes
This problem crops up in G++ 1.35.0 and doesn't appear to be fixed in
1.35.1:
% cat used.c
typedef int (*PF) ();
static int hash();
PF
f()
{
PF hp;
hp = &::hash;
return hp;
}
static int
hash()
{
return 10;
}
% g++ -Wall -v -S used.c
g++ version 1.35.0
/usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc6800
0 -Dhp300 -Dhp9000 -Dunix -D__mc68000__ -D__hp300__ -D__hp9000__ -D__unix__ -Wal
l -D__HAVE_FPU__ used.c /tmp/cc011574.cpp
GNU CPP version 1.34
/usr/local/lib/gcc-cc1plus /tmp/cc011574.cpp -quiet -dumpbase used.c -Wall -nor
eg -version -o used.s
GNU C++ version 1.35.0 (68k, MIT syntax) compiled by GNU C version 1.34.
used.c:16: warning: `int hash ()' defined but not used
%
(In the user's actual example, 'f' is a method and there is a 'hash'
member in the class of 'f', hence the need for explicit scoping. In
any case, if the :: scope operator is removed, the problem goes away.)
This seems to be the result of an oversight. G++ handles scoped global
identifiers differently from ordinary bare identifiers; the latter are
marked used in the function hack_identifier, but the former don't get
marked at all. GCC doesn't have this split and it doesn't have this
bug... I copied the code to set TREE_USED into the action for scoped
globals in cplus-parse.y, and it appeared to fix the problem:
*** /tmp/,RCSt1011807 Wed Jul 26 00:29:40 1989
--- cplus-parse.y Tue Jul 25 22:46:34 1989
***************
*** 1034,1039 ****
--- 1034,1045 ----
}
else if (TREE_CODE ($$) == CONST_DECL)
$$ = DECL_INITIAL ($$);
+ if (! TREE_USED ($$))
+ {
+ if (TREE_EXTERNAL ($$))
+ assemble_external ($$);
+ TREE_USED ($$) = 1;
+ }
}
| scoped_declarator identifier_or_opname %prec HYPERUNARY
{ $$ = build_member_ref ($1, $2, 0); }
Donn Seeley University of Utah CS Dept donn@cs.utah.edu
40 46' 6"N 111 50' 34"W (801) 581-5668 utah-cs!donn
Technical Details
Message-ID:
<2248@wasatch.utah.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!usc!cs.utexas.edu!wasatch!donnShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!usc!cs.utexas.edu!wasatch!donn From: donn@wasatch.utah.edu (Donn Seeley) Newsgroups: gnu.g++.bug Subject: g++ -Wall produces incorrect 'defined but not used' warnings Message-ID: <2248@wasatch.utah.edu> Date: 26 Jul 89 06:33:28 GMT Organization: University of Utah CS Dept Lines: 65