This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] [PR18071] -Winline and -fno-default-inline


this simple patch fixes a wrong interaction between -Winline
and -fno-default-inline. In the C++ frontend, when -fno-default-inline is
used, the DECL for a member function defined within the class definition is
created with DECL_DECLARED_INLINE = 1 but DECL_INLINE = 0.

This causes a problem in tree-inline when -Winline is used, because
expand_call_inline thinks that a warning should be emitted for all the
functions marked with DECL_DECLARED_INLINE which did not get inlined. This
is wrong: what we actually want is to emit a warning for the functions
marked with DECL_INLINE, because those are the ones which are candidates for
inlining at any -O level.

After this fix, we hit a problem in the C frontend, c-decl.c, because
grokdeclarator has some logic to mark bare declarations with the inline
specifier (but without a corrisponding definition) as
DECL_DECLARED_INLINE=1, DECL_INLINE=0. The logic was added by RTH here:, to workaround a
problem in dwarf2out. It looks like this is no longer the case: when I
remove the code, I see no testsuite failures (and I verified that the
original testcases added with that patch are still in the testsuite).

Fully bootstrapped and regression tested on i686-pc-linux-gnu with no new
regressions. OK for mainline?

Giovanni Bajo

        PR middle-end/18071
        * tree-inline.c (expand_call_inline): Do not warn for functions that
        frontends marked as not inlineable.
        * c-decl.c (grokdeclarator): Mark even bare declarations with

        PR middle-end/18071
        * g++.dg/warn/Winline-5.C: New test.

Attachment: patch-pr18071.txt
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]