JDK-8003259 : NPG: Build with gcc 4.7.2 broken by 7045397
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs25
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2012-11-11
  • Updated: 2014-01-14
  • Resolved: 2012-11-15
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 Other
8Fixed hs25Fixed
Related Reports
Relates :  
Relates :  
Description
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 
Comments
8003722 adds further fixes to debug-only code
05-12-2012

Moving to gc under NPG so Jon can pick this up assuming David's analysis is correct.
13-11-2012