[Bug c++/13768] [3.4/3.5 Regression] -funit-at-a-time compiles unused inline function

ebotcazou at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Feb 3 08:39:00 GMT 2004


------- Additional Comments From ebotcazou at gcc dot gnu dot org  2004-02-03 08:38 -------
With -funit-at-a-time, the C++ front-end (decl2.c:maybe_emit_vtables) emits the
vtable for struct X, while it doesn't do so without -funit-at-a-time.

The difference in the behaviour boils down to this macro in cp-tree.h:

/* DECL_NEEDED_P holds of a declaration when we need to emit its
   definition.  This is true when the back-end tells us that
   the symbol has been referenced in the generated code.  If, however,
   we are not generating code, then it is also true when a symbol has
   just been used somewhere, even if it's not really needed.  We need
   anything that isn't comdat, but we don't know for sure whether or
   not something is comdat until end-of-file.  */
#define DECL_NEEDED_P(DECL)					\
  ((at_eof && TREE_PUBLIC (DECL) && !DECL_COMDAT (DECL))	\
   || (DECL_ASSEMBLER_NAME_SET_P (DECL)				\
       && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)))	\
   || (((flag_syntax_only || flag_unit_at_a_time) && TREE_USED (DECL))))


According to the comment, it seems that -funit-at-a-time behaves like
-fsyntax-only, that is it may emit DECLs that are not really needed.


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|optimization                |c++


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13768



More information about the Gcc-bugs mailing list