Build portability: enable or disable warnings

David Holmes David.Holmes at oracle.com
Wed May 18 23:47:56 UTC 2011


Dr Andrew John Hughes said the following on 05/19/11 05:29:
> On 08:35 Mon 16 May     , Kelly O'Hair wrote:
<snip>
>> The -Werror option is a blessing and a curse. I find it highly commendable that teams (like 
>> hotspot) have taken a 'no warnings allowed' approach to their code base, more teams should do this.
>> Given the critical nature of a VM in the JDK, it only makes sense to take all precautions in verifying the code is correct.
>>
> 
> I find it quite interesting that the one situation where -Werror is used is where it's likely to hit
> the most difficulties. The HotSpot code is compiled by three different compilers (gcc and whatever
> is used on Solaris and Windows) and the version of these used can vary considerably, as the system C++ compiler
> is unrelated to the JDK.  

Hotspot only uses -Werror with gcc. And its use predates the sudden 
plethora of compiler versions now used to build OpenJDK. In prior times 
the build compiler for a given release was set in stone so we knew what 
warnings (and bugs!) to expect. I believe we also disable problematic 
warnings when necessary. By using -Werror when we did update compiler 
versions we quickly discovered where the compiler was tightening the 
rules and issuing new warnings - then we could determine whether to fix 
the code (if practical) or disable the warning.

> In contrast, there are basically two Java compilers in general use (javac and ecj)
> and one is part of OpenJDK.  Yet, the Java code does not have -Werror enabled by default and there
> are a mass of warnings there as a result.

I don't understand the point you are making here. Does javac even have a 
-Werror? The bulk of javac warnings stem from legacy code being compiled 
under newer compilers with new language features - the resulting code is 
not erroneous hence only a warning is issued.

I think comparing C/C++ compiler warnings with javac compiler warnings 
is like comparing apples and elephants.

David
-----

>> But it only makes 100% sense when using the same compiler, same compiler version, and on the same system.
> 
> Which is extremely rare with HotSpot and the C++ compiler, but the first two are very likely for the Java
> code as the build uses its own javac in most cases.
> 
>> For hotspot, you should be able to get rid of -Werror  by setting WARNINGS_ARE_ERRORS to empty.
>>
> 
> Thanks for this, I wasn't aware of it.  Are these flags documented somewhere?  I keep seeming to find
> out about new ones randomly in e-mails.
> 
>> I've wondered if we need to put a little more smarts in determining what situations (compiler&os) warrant
>> adding the -Werror, but at the same time if it is a valid warning, maybe the behavior we have is right.
>> So my attitude up to this time has been that new ports should use WARNINGS_ARE_ERRORS=
>> to start, but eventually they should fix these warnings before a port is finished.
>> (And I use the term 'port' very loosely here, a new version of gcc is a port to me).
>>
> 
> I'd go for using the version checking that's already in the build system, and only turning on Werror if
> gcc/g++ matches the version that's been tested against.  Even then, there may be platform-dependent differences.
> 
> snip...
>> -kto
>>
> 



More information about the build-dev mailing list