RFR: 8044797 Building with clang gives: fatal error: file '...' has been modified since the precompiled header was built

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Jun 5 12:50:06 UTC 2014


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. Should use the "$(RM) $@" form, but I see that the
current HotSpot makefiles are inconsistent about that. Sigh...

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