RFR: 8074895: os::getenv is inadequate

Kim Barrett kim.barrett at oracle.com
Mon Mar 23 15:48:54 UTC 2015


On Mar 23, 2015, at 3:45 AM, David Holmes <david.holmes at oracle.com> wrote:
> 
> On 23/03/2015 4:12 PM, David Holmes wrote:
>> On 21/03/2015 3:32 AM, Jeremy Manson wrote:
>>> Argh.  Yes.  Martin told me not to get involved with Windows, but would
>>> I listen?  Of course not...
>>> 
>>> http://cr.openjdk.java.net/~jmanson/8074895/webrev.04/
>> 
>> Looks okay to me - running a test job now.
> 
> <sigh> This just isn't meant to be :( It seems that:
> 
> GrowableArray<JavaVMOption> options(2, true);
> 
> in arguments.cpp is giving the windows compiler some grief:
> 
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\utilities/growableArray.hpp(171) : error C2220: warning treated as error - no 'object' file generated
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\utilities/growableArray.hpp(168) : while compiling class template member function 'GrowableArray<E>::GrowableArray(int,bool,MEMFLAGS)'
>        with
>        [
>            E=JavaVMOption
>        ]
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\runtime\arguments.cpp(3516) : see reference to class template instantiation 'GrowableArray<E>' being compiled
>        with
>        [
>            E=JavaVMOption
>        ]
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\utilities/growableArray.hpp(171) : warning C4345: behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\utilities/growableArray.hpp(388) : warning C4345: behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
> C:\jprt\T\P1\071814.daholme\s\hotspot\src\share\vm\utilities/growableArray.hpp(379) : while compiling class template member function 'void GrowableArray<E>::grow(int)'
>        with
>        [
>            E=JavaVMOption
>        ]
> 
> I'm guessing it doesn't like the enum as the generic arg, but don't know why given that it accepts plain int elsewhere. ???

Just suppressing this warning (unconditionally everywhere) would probably make sense.

Microsoft describes it as an obsolete warning:

https://msdn.microsoft.com/en-us/library/wewb47ee.aspx

"This warning is obsolete. It is only generated in Visual Studio 2005 through Visual Studio 2012. It reports a behavior change from the Visual C++ compiler that shipped in Visual Studio .NET when initializing a POD (plain old data) object with (); the compiler default-initializes the object.”

It’s too bad the JDK9 supported build platform for Windows is still lagging.



More information about the hotspot-runtime-dev mailing list