compilation failure using gcc 4.7.2
BILL PITTORE
bill.pittore at oracle.com
Fri Nov 30 06:45:29 PST 2012
Not familiar enough with the new build system to comment on that. As to
it still failing, I wonder if the gcc doc is incorrect? Have not
actually tried this myself.
bill
On 11/30/2012 7:48 AM, Peter Levart wrote:
> 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