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

David Holmes david.holmes at oracle.com
Sun Nov 12 21:17:19 UTC 2017


I've filed:

https://bugs.openjdk.java.net/browse/JDK-8191102

for the include issue.

But I don't think this is caused by two-phase-name-lookup as that is not 
yet enabled by default in VS2017.

David

On 12/11/2017 3:44 PM, David Holmes wrote:
> 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