RFR: 8044797 Building with clang gives: fatal error: file '...' has been modified since the precompiled header was built
David Holmes
david.holmes at oracle.com
Fri Jun 6 05:42:59 UTC 2014
On 5/06/2014 10:50 PM, Daniel D. Daugherty wrote:
> On 6/5/14 6:05 AM, Staffan Larsen wrote:
>> The same problem exists on linux, so here is a diff for both bsd and
>> linux:
>>
>> $ hg qdiff
>> diff --git a/make/bsd/makefiles/vm.make b/make/bsd/makefiles/vm.make
>> --- a/make/bsd/makefiles/vm.make
>> +++ b/make/bsd/makefiles/vm.make
>> @@ -295,6 +295,7 @@
>> $(PRECOMPILED_HEADER):
>> $(QUIETLY) echo Generating precompiled header $@
>> $(QUIETLY) mkdir -p $(PRECOMPILED_HEADER_DIR)
>> + $(QUIETLY) rm -f $@
>> $(QUIETLY) $(COMPILE.CXX) $(DEPFLAGS) -x c++-header
>> $(PRECOMPILED_HEADER_SRC) -o $@ $(COMPILE_DONE)
>>
>> # making the library:
>> diff --git a/make/linux/makefiles/vm.make b/make/linux/makefiles/vm.make
>> --- a/make/linux/makefiles/vm.make
>> +++ b/make/linux/makefiles/vm.make
>> @@ -290,6 +290,7 @@
>> $(PRECOMPILED_HEADER):
>> $(QUIETLY) echo Generating precompiled header $@
>> $(QUIETLY) mkdir -p $(PRECOMPILED_HEADER_DIR)
>> + $(QUIETLY) rm -f $@
>> $(QUIETLY) $(COMPILE.CXX) $(DEPFLAGS) -x c++-header
>> $(PRECOMPILED_HEADER_SRC) -o $@ $(COMPILE_DONE)
>>
>> # making the library:
>
> Looks fine.
+1
> Should use the "$(RM) $@" form, but I see that the
> current HotSpot makefiles are inconsistent about that. Sigh...
Alas the same is true for mkdir, echo, ...
David
> Dan
>
>
>>
>>
>>
>>
>> On 5 jun 2014, at 13:52, Staffan Larsen <staffan.larsen at oracle.com>
>> wrote:
>>
>>> On 5 jun 2014, at 13:38, David Holmes <david.holmes at oracle.com> wrote:
>>>
>>>> On 4/06/2014 11:54 PM, Staffan Larsen wrote:
>>>>> When building with clang and changing a file that is part of the
>>>>> precompiled header, you can get:
>>>>>
>>>>> fatal error: file
>>>>> '/Users/staffan/mercurial/jdk9-hs-rt/hotspot/src/share/vm/runtime/thread.hpp'
>>>>> has been modified since the precompiled header was built
>>>>>
>>>>> clang behaves differently than gcc here.
>>>> You mean clang reports an error when regenerating the pch file? That
>>>> seems like a bug to me.
>>> Yes. It also deletes the files, so rerunning the same command again
>>> succeeds...
>>>
>>>> Deleting the file first seems quite reasonable.
>>> Thanks.
>>>
>>> /Staffan
>>>
>>>> Thanks,
>>>> David
>>>>
>>>>> Example with clang:
>>>>>
>>>>> $ ls
>>>>> test.h
>>>>> $ cat test.h
>>>>> #include <stdio.h>
>>>>> $ clang -x c-header -include test.h test.h -o test.h.pch
>>>>> $ touch test.h
>>>>> $ clang -x c-header -include test.h test.h -o test.h.pch
>>>>> fatal error: file '/Users/staffan/tmp/pch/test.h' has been modified
>>>>> since the precompiled header was built
>>>>> 1 error generated.
>>>>>
>>>>> Same with gcc:
>>>>>
>>>>> $ ls
>>>>> test.h
>>>>> $ cat test.h
>>>>> #include <stdio.h>
>>>>> $ gcc -x c-header -include test.h test.h -o test.h.pch
>>>>> $ touch test.h
>>>>> $ gcc -x c-header -include test.h test.h -o test.h.pch
>>>>>
>>>>>
>>>>> The proposed fix is to delete the .pch file before calling clang or
>>>>> gcc.
>>>>>
>>>>> diff --git a/make/bsd/makefiles/vm.make b/make/bsd/makefiles/vm.make
>>>>> --- a/make/bsd/makefiles/vm.make
>>>>> +++ b/make/bsd/makefiles/vm.make
>>>>> @@ -295,6 +295,7 @@
>>>>> $(PRECOMPILED_HEADER):
>>>>> $(QUIETLY) echo Generating precompiled header $@
>>>>> $(QUIETLY) mkdir -p $(PRECOMPILED_HEADER_DIR)
>>>>> + $(QUIETLY) rm -f $@
>>>>> $(QUIETLY) $(COMPILE.CXX) $(DEPFLAGS) -x c++-header
>>>>> $(PRECOMPILED_HEADER_SRC) -o $@ $(COMPILE_DONE)
>>>>>
>>>>> # making the library:
>>>>>
>>>>>
>>>>> Thanks,
>>>>> /Staffan
>>>>>
>
More information about the hotspot-dev
mailing list