Missing/wrong build dependencies for inline functions in HotSpot

Volker Simonis volker.simonis at gmail.com
Fri Jun 8 15:58:51 UTC 2012


Hi,

I've just stumbled across the problem that changing the implementation
of an inline function in HotSpot does not necessarily rebuild all the
call sites of that function. This is because because of the way how
the build dependencies are handled within the HotSpot. As an example
you may have a look at frame.cpp:

frame.cpp includes frame.inline.hpp
frame.inline.hpp includes frame_x86.inline.hpp

However frame.cpp only depends on frame.inline.hpp directly (i.e.
frame.cpp only includes frame.inline.hpp directly and this is where
the dependencies generated by gcc with '-MMD' are computed from).
So if an inline function in frame_x86.inline.hpp will be changed (e.g.
the constructor frame::frame()), frame.cpp will not be recompiled in
an incremental build, although it uses the constructor frame::frame().
This makes incremental builds useless (or dangerous, depending on the
view point) when inline functions are changed.

I think this is a non-trivial problem which is deeply rooted in the
way how C++ implements inlining and the way how inline functions are
defined in HotSpot (i.e. .hpp, .inline.hpp,  _<cpu>.hpp and
_<cpu>.inline.hpp files). I don't have a solution for it but just
wanted to ask if somebody else already stumbled upon this problem
and/or has solution for it?

Regards,
Volker



More information about the build-dev mailing list