RFR (M): 8188224: Generalize Atomic::load/store to use templates

David Holmes david.holmes at oracle.com
Sun Nov 12 05:44:17 UTC 2017


Hi Kim,

Many thanks for taking a look.

On 12/11/2017 2:47 PM, Kim Barrett wrote:
>> On Nov 10, 2017, at 10:30 PM, David Holmes <david.holmes at oracle.com> wrote:
>>
>> Hi Mikael,
>>
>> On 11/11/2017 10:59 AM, Michael Dardis wrote:
>>> Hi David,
>>> Unfortunately I'm using VS2017 for a couple of reasons (64bit compiler in community edition, improved UWP support). Everything else works fine with a couple of very minor tweaks, but I'm having real trouble trying to deal with the templates here and figure out what's missing.
>>
>> I've cc'd our C++ guru Kim Barrett.
> 
> I saw this, but haven’t had a chance to seriously look at it yet.
> 
> One thing I did notice, though, is that all the OrderAccess definitions (as opposed to declarations) are in
> orderAccess.inline.hpp.  That doesn’t appear to be a change from the pre-templatization; all the pre-template
> definitions were in the inline.hpp file too.
> 
> However, the offending call to OrderAccess::release_store is in a .hpp file (classLoader.hpp), which only
> includes orderAccess.hpp (and it shouldn’t include orderAccess.inline.hpp, because .hpp files are not
> supposed to include .inline.hpp files).  Which means the call in classLoader.hpp might only see the
> declaration, and not the definition.  That seems like a bug.

Yes that needs to be fixed. Though exact fix seems a little tricky if we 
still want the referring function to be inlined.

> I haven’t thought this through carefully, but this might be a two-phase name lookup issue.  Note that
> VS2017 is the first version of VS that has two-phase name lookup.  Other compilers (gcc & clang)
> have had two-phase lookup for a (very!) long time.  Assuming this is the right area to be looking (and
> I’m not sure of that yet), it could be that VS2017 is being more strict than those other compilers (that
> aren’t complaining about this code but maybe should?), or that VS2017 has a bug in this new (to it)
> area.
> 
> There is a pretty thorough discussion of the two-phase name lookup issue in VS here:
> https://blogs.msdn.microsoft.com/vcblog/2017/09/11/two-phase-name-lookup-support-comes-to-msvc/
> It also discusses how to obtain the old behavior, using /Zc:twoPhase-.  It would be interesting to know
> whether that made any difference for this problem.  (I don’t have easy access to VS2017 or even have
> any familiarity with using it, or Windows for that matter.)

Okay - so we may have a workaround pending the fix. Hopefully Michael 
can test this out.

Thanks again.
David



More information about the hotspot-dev mailing list