Skip to content

Commit

Permalink
java/openjdk8: fix build with clang 16
Browse files Browse the repository at this point in the history
Since clang 16 (and gcc 11) the default C++ standard is now gnu++17.
Because java/openjdk8's build infrastructure does not explicitly set its
C++ standard, this leads to several errors:

  /wrkdirs/usr/ports/java/openjdk8/work/jdk8u-jdk8u362-b09.1/hotspot/src/share/vm/adlc/arena.cpp:82:3: error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
    register Chunk *k = _first;
    ^~~~~~~~~
  /wrkdirs/usr/ports/java/openjdk8/work/jdk8u-jdk8u362-b09.1/hotspot/src/share/vm/adlc/arena.cpp:96:3: error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
    register Chunk *k = _chunk;   // Get filled-up chunk address
    ^~~~~~~~~
  2 errors generated.
  /wrkdirs/usr/ports/java/openjdk8/work/jdk8u-jdk8u362-b09.1/hotspot/src/share/vm/adlc/adlparse.cpp:4567:3: error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
    register char c;
    ^~~~~~~~~
  /wrkdirs/usr/ports/java/openjdk8/work/jdk8u-jdk8u362-b09.1/hotspot/src/share/vm/adlc/adlparse.cpp:4765:3: error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
    register char c;
    ^~~~~~~~~

For newer versions of OpenJDK this has been fixed by removing the
'register' keyword, but upstream has not yet backported it to OpenJDK 8.
To work around the errors, define the register keyword away using a
command line flag.

PR:		271080
Approved by:	glewis (maintainer)
MFH:		2023Q2
  • Loading branch information
DimitryAndric committed Apr 29, 2023
1 parent 276de0b commit 6c75252
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions java/openjdk8/Makefile
@@ -1,5 +1,6 @@
PORTNAME= openjdk
PORTVERSION= ${JDK_MAJOR_VERSION}.${JDK_UPDATE_VERSION}.${JDK_BUILD_NUMBER}.${BSD_JDK_VERSION}
PORTREVISION= 1
CATEGORIES= java devel
MASTER_SITES= LOCAL/jkim:jtreg
PKGNAMESUFFIX?= ${JDK_MAJOR_VERSION}
Expand Down Expand Up @@ -213,6 +214,13 @@ BUILD_DEPENDS+= clang${LLVM_VER}:devel/llvm${LLVM_VER}
CC= ${LOCALBASE}/bin/clang${LLVM_VER}
CXX= ${LOCALBASE}/bin/clang++${LLVM_VER}
.endif
.if ${COMPILER_VERSION} >= 160
# clang 16 defaults to C++17, which no longer allows the 'register' keyword.
# There is an upstream commit that removes all the individual 'register'
# keywords, but it has not yet been backported to OpenJDK 8.
# NOTE: passing this option via --with-extra-cflags does not work.
CFLAGS+= -Dregister=
.endif
.endif

# GCC is broken with PCH: https://lists.freebsd.org/pipermail/svn-src-all/2015-March/101722.html
Expand Down

0 comments on commit 6c75252

Please sign in to comment.