compilation failure using gcc 4.7.2

BILL PITTORE bill.pittore at oracle.com
Thu Nov 15 07:04:21 PST 2012


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



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