compilation failure using gcc 4.7.2
Peter Levart
peter.levart at gmail.com
Fri Nov 30 04:48:48 PST 2012
On 11/15/2012 04:04 PM, BILL PITTORE wrote:
> Looks like this behavior is called out in the 4.7.2 manual as a "Known
> cause of trouble with GCC"; section 11.8.2 in the 4.7.2 manual. Using
> the -fpermissive flag forces gcc to older more permissive behavior.
>
> bill
Hi Bill,
Do you know where to put this option in the new build system?
I tried with:
../autoconf/configure --with-extra-cflags=-fpermissive
and I noticed it gets put into some makefiles:
./build/linux-x86_64-normal-server-release/hotspot-spec.gmk:
EXTRA_CFLAGS=-fpermissive
./build/linux-x86_64-normal-server-release/spec.gmk:
# using 'configure --with-extra-cflags=-fpermissive'
CFLAGS_JDKLIB:= -W -Wall -Wno-unused -Wno-parentheses
-pipe -D_GNU_SOURCE -D_REENTRANT
-D_LARGEFILE64_SOURCE -fno-omit-frame-pointer -D_LP64=1 -D_LITTLE_ENDIAN
-DLINUX -DNDEBUG -DARCH='"amd64"' -Damd64 -DRELEASE='"1.8.0-internal"'
-I/home/peter/work/hg/jdk8-tl/build/linux-x86_64-normal-server-release/jdk/include
-I/home/peter/work/hg/jdk8-tl/build/linux-x86_64-normal-server-release/jdk/include/linux
-I/home/peter/work/hg/jdk8-tl/jdk/src/share/javavm/export
-I/home/peter/work/hg/jdk8-tl/jdk/src/solaris/javavm/export
-I/home/peter/work/hg/jdk8-tl/jdk/src/share/native/common
-I/home/peter/work/hg/jdk8-tl/jdk/src/solaris/native/common -fpermissive
-fno-strict-aliasing -fPIC
CFLAGS_JDKEXE:= -W -Wall -Wno-unused -Wno-parentheses
-pipe -D_GNU_SOURCE -D_REENTRANT
-D_LARGEFILE64_SOURCE -fno-omit-frame-pointer -D_LP64=1 -D_LITTLE_ENDIAN
-DLINUX -DNDEBUG -DARCH='"amd64"' -Damd64 -DRELEASE='"1.8.0-internal"'
-I/home/peter/work/hg/jdk8-tl/build/linux-x86_64-normal-server-release/jdk/include
-I/home/peter/work/hg/jdk8-tl/build/linux-x86_64-normal-server-release/jdk/include/linux
-I/home/peter/work/hg/jdk8-tl/jdk/src/share/javavm/export
-I/home/peter/work/hg/jdk8-tl/jdk/src/solaris/javavm/export
-I/home/peter/work/hg/jdk8-tl/jdk/src/share/native/common
-I/home/peter/work/hg/jdk8-tl/jdk/src/solaris/native/common -fpermissive
-fno-strict-aliasing
... but I still get this error.
Regards, Peter
>
>
>
> On 11/14/2012 11:39 PM, David Holmes wrote:
>> On 15/11/2012 2:13 PM, Coleen Phillimore wrote:
>>>
>>> David,
>>>
>>> I think adding this-> to these is the best way to fix these, and we've
>>> been fixing similar bugs the same way. I don't think anyone preferred
>>> adding "using" directives, at least for this sort of compilation error.
>>
>> That should have been debated when 7172226 was fixed. Personally I
>> think adding this-> all over the place is a PITA, particularly as
>> each tweak of gcc seems to add a need for more of them in more places.
>>
>>> I'm not sure why the compilation error exists. It seems that the
>>> compiler should be able to resolve these calls with the same template
>>> instantiation as the function, but I guess not.
>>
>> I'm not going to even try and guess what a C++ compiler might or
>> might not be able to do :) But yes it seems natural to me that given
>> foo() the first place you look for foo() is in "this" :( But I'm not
>> a compiler writer. ;-)
>>
>> Cheers,
>> David
>>
>>>
>>> Coleen
>>>
>>> On 11/4/2012 5:28 PM, David Holmes wrote:
>>>> Hi Peter,
>>>>
>>>> I think we have lost some changes through the NPG integration. This
>>>> code was updated by Mikael Gerdin under:
>>>>
>>>> 7172226: HotSpot fails to build with GCC 4.7 because of stricter c++
>>>> argument dependent lookup
>>>>
>>>> http://hg.openjdk.java.net/jdk8/jdk8/hotspot/diff/a297b0e14605/src/share/vm/memory/binaryTreeDictionary.cpp
>>>>
>>>>
>>>>
>>>> but the NPG changes by Jon under
>>>>
>>>> 7045397: NPG: Add freelists to class loader arenas
>>>>
>>>> http://hg.openjdk.java.net/jdk8/jdk8/hotspot/rev/685df3c6f84b
>>>>
>>>> http://hg.openjdk.java.net/jdk8/jdk8/hotspot/diff/685df3c6f84b/src/share/vm/memory/binaryTreeDictionary.cpp
>>>>
>>>>
>>>>
>>>> seems to have undone those changes in part.
>>>>
>>>> The preferred fix was to add "using" directives rather than writing
>>>> fully-qualified names.
>>>>
>>>> David
>>>>
>>>> On 5/11/2012 7:09 AM, Peter Levart wrote:
>>>>> Hi,
>>>>>
>>>>> Current head of jdk8/hotspot repository (3790:4d37eb50b9b1) can
>>>>> not be
>>>>> built with gcc 4.7.2.
>>>>>
>>>>> I had to make the following changes to compile with gcc 4.7.2 (on
>>>>> linux):
>>>>>
>>>>>
>>>>> diff -r 4d37eb50b9b1 src/share/vm/memory/binaryTreeDictionary.cpp
>>>>> --- a/src/share/vm/memory/binaryTreeDictionary.cpp Thu Nov 01
>>>>> 14:11:16
>>>>> 2012 -0700
>>>>> +++ b/src/share/vm/memory/binaryTreeDictionary.cpp Sun Nov 04
>>>>> 22:07:29
>>>>> 2012 +0100
>>>>> @@ -239,7 +239,7 @@
>>>>> } else {
>>>>> if (nextTC == NULL) {
>>>>> // Removing chunk at tail of list
>>>>> - link_tail(prevFC);
>>>>> + this->link_tail(prevFC);
>>>>> }
>>>>> // Chunk is interior to the list
>>>>> prevFC->link_after(nextTC);
>>>>> @@ -296,7 +296,7 @@
>>>>>
>>>>> Chunk_t* fc = tail();
>>>>> fc->link_after(chunk);
>>>>> - link_tail(chunk);
>>>>> + this->link_tail(chunk);
>>>>>
>>>>> assert(!tail() || size() == tail()->size(), "Wrong sized chunk in
>>>>> list");
>>>>> FreeList_t<Chunk_t>::increment_count();
>>>>> @@ -323,7 +323,7 @@
>>>>> chunk->link_after(fc);
>>>>> } else {
>>>>> assert(tail() == NULL, "List is inconsistent");
>>>>> - link_tail(chunk);
>>>>> + this->link_tail(chunk);
>>>>> }
>>>>> head()->link_after(chunk);
>>>>> assert(!head() || size() == head()->size(), "Wrong sized chunk in
>>>>> list");
>>>>> @@ -940,7 +940,7 @@
>>>>> void do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
>>>>> if (tl != NULL) {
>>>>> do_tree(tl->left());
>>>>> - do_list(tl);
>>>>> + this->do_list(tl);
>>>>> do_tree(tl->right());
>>>>> }
>>>>> }
>>>>> @@ -952,7 +952,7 @@
>>>>> void do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
>>>>> if (tl != NULL) {
>>>>> do_tree(tl->right());
>>>>> - do_list(tl);
>>>>> + this->do_list(tl);
>>>>> do_tree(tl->left());
>>>>> }
>>>>> }
>>>>> @@ -1008,7 +1008,7 @@
>>>>> bool do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
>>>>> if (tl != NULL) {
>>>>> if (do_tree(tl->left())) return true;
>>>>> - if (do_list(tl)) return true;
>>>>> + if (this->do_list(tl)) return true;
>>>>> if (do_tree(tl->right())) return true;
>>>>> }
>>>>> return false;
>>>>> @@ -1022,7 +1022,7 @@
>>>>> bool do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
>>>>> if (tl != NULL) {
>>>>> if (do_tree(tl->right())) return true;
>>>>> - if (do_list(tl)) return true;
>>>>> + if (this->do_list(tl)) return true;
>>>>> if (do_tree(tl->left())) return true;
>>>>> }
>>>>> return false;
>>>>>
>>>>>
>>>>>
>>>>> Regards, Peter
>>>>>
>>>
>
>
More information about the hotspot-runtime-dev
mailing list