Build succeeds even if JDK source file fails to compile

Stuart Marks stuart.marks at oracle.com
Sat Dec 17 16:27:26 UTC 2011


They all seem so innocuous, don't they? :-/

OK, I just pushed the fix. Everybody, please keep an eye out for any weirdness 
in the build.

s'marks

On 12/17/11 1:06 AM, David Holmes wrote:
> Looks good to me too.
>
> And the original change seemed so innocuous. <sigh>
>
> David
>
> On 17/12/2011 5:58 AM, Stuart Marks wrote:
>> Here's a fix I'm working on. I'm still doing test builds but I wanted to
>> get this in front of people pretty quickly.
>>
>> The initial diagnosis was correct; adding an "echo" (or some other
>> command) after the javac will prevent javac's failure code from reaching
>> make and thus not stopping the build if there is an error.
>>
>> The fix is to use && instead of ; to separate the commands, i.e.
>>
>> javac && echo "# javac finished"
>>
>> If javac fails this will abort the commands chained with && and report
>> the failure code back to make.
>>
>> Diff below.
>>
>> s'marks
>>
>>
>>
>> diff -r c647ebb3c4f7 make/common/Rules.gmk
>> --- a/make/common/Rules.gmk Tue Dec 13 15:41:47 2011 -0800
>> +++ b/make/common/Rules.gmk Fri Dec 16 11:52:48 2011 -0800
>> @@ -239,7 +239,7 @@
>> $(CAT) $<.filtered; \
>> $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \
>> $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR)
>> @$<.filtered; \
>> - $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR)
>> @$<.filtered; \
>> + $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR)
>> @$<.filtered && \
>> $(ECHO) "# javac finished"; \
>> fi
>> @$(java-vm-cleanup)
>>
>>
>> On 12/16/11 10:12 AM, Mandy Chung wrote:
>>> On 12/16/2011 9:26 AM, Kelly O'Hair wrote:
>>>> You are correct. This changeset was wrong.
>>>>
>>>
>>> Chris - good find.
>>>
>>>> Mandy was asking me about this a while back
>>>
>>> That was Wednesday - not long ago. jigsaw build has a similar issue:
>>> http://hg.openjdk.java.net/jigsaw/jigsaw/jdk/diff/459b6cbb0de7/make/common/Rules.gmk
>>>
>>>
>>>
>>>
>>> that I have fixed. I didn't get the chance to check on jdk8/tl yet.
>>>
>>> Mandy
>>>
>>>> and I was also noticing the problem with a recent
>>>> problem Maurizio was having doing boot cycle builds on Linux, where
>>>> javac
>>>> failed, make did not stop,
>>>> and merrily crashed later in javah. :^(
>>>>
>>>> -kto
>>>>
>>>> On Dec 16, 2011, at 6:13 AM, Chris Hegarty wrote:
>>>>
>>>>> I filed CR 7122235 for this issue.
>>>>>
>>>>> Forcing a compile time error of a JDK class by inserting some bad
>>>>> code is
>>>>> just ignored and the build continues, and appears to complete
>>>>> successfully.
>>>>>
>>>>> I believe the changes for CR 7116322 "enhance javac make rule with a
>>>>> little
>>>>> bit of instrumentation", caused this problem.
>>>>>
>>>>> Changeset for 7116322:
>>>>> http://hg.openjdk.java.net/jdk8/tl/jdk/rev/43a630f11af6
>>>>>
>>>>> After the javac cmd is run there is a simple echo to indicate 'javac
>>>>> finished'. I am not a makefile expert, but I think the makefiles are
>>>>> checking the return code for this directive/rule and now will always
>>>>> see the
>>>>> successful return code of the echo, so it will never fail.
>>>>>
>>>>> Example:
>>>>>
>>>>> # Running javac: 18 files; in
>>>>> /export2/Users/chris/repos/jdk8/tl/buildFail/make/com/sun/net/ssl
>>>>> /java/re/jdk/1.8.0/promoted/latest/binaries/solaris-i586/bin/javac
>>>>> -J-XX:ThreadStackSize=768 -J-XX:-PrintVMOptions
>>>>> -J-XX:+UnlockDiagnosticVMOptions -J-XX:-LogVMOutput -J-client
>>>>> -J-Xmx512m
>>>>> -J-Xms512m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -g -Werror
>>>>> -Xlint:all,-deprecation -Xlint:all -Xlint:-path -source 7 -target 7
>>>>> -encoding ascii
>>>>> -Xbootclasspath:../../../../../build/solaris-i586/classes
>>>>> -sourcepath
>>>>> ../../../../../src/closed/solaris/classes:../../../../../src/closed/share/classes:../../../../../build/solaris-i586/gensrc:../../../../../src/solaris/classes:../../../../../src/share/classes
>>>>>
>>>>>
>>>>> -d ../../../../../build/solaris-i586/classes
>>>>> @../../../../../build/solaris-i586/tmp/sun/com.sun.net.ssl/.classes.list.filtered
>>>>>
>>>>>
>>>>>
>>>>> ../../../../../src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java:438:
>>>>>
>>>>>
>>>>> error: missing return statement
>>>>> }
>>>>> ^
>>>>> Note: Some input files use or override a deprecated API.
>>>>> Note: Recompile with -Xlint:deprecation for details.
>>>>> 1 error
>>>>> # javac finished
>>>>> make381[3]: Leaving directory
>>>>> `/export2/Users/chris/repos/jdk8/tl/buildFail/make/com/sun/net/ssl'
>>>>> make381[3]: Entering directory
>>>>> `/export2/Users/chris/repos/jdk8/tl/buildFail/make/com/sun/jarsigner'
>>>>> make381[3]: Leaving directory
>>>>> `/export2/Users/chris/repos/jdk8/tl/buildFail/make/com/sun/jarsigner'
>>>>> make381[3]: Entering directory
>>>>> `/export2/Users/chris/repos/jdk8/tl/buildFail/make/com/sun/image'
>>>>>
>>>>> -Chris.



More information about the build-dev mailing list