Bug 262845 - java/openjdk13 java/openjdk14 java/openjdk15 java/openjdk16 java/openjdk17: fix build with clang 14
Summary: java/openjdk13 java/openjdk14 java/openjdk15 java/openjdk16 java/openjdk17: f...
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-java (Nobody)
URL:
Keywords:
Depends on:
Blocks: 261742
  Show dependency treegraph
 
Reported: 2022-03-26 19:53 UTC by Dimitry Andric
Modified: 2022-04-04 12:50 UTC (History)
1 user (show)

See Also:
bugzilla: maintainer-feedback? (java)


Attachments
Add -Wno-bitwise-instead-of-logical for clang >= 14 (3.50 KB, patch)
2022-03-26 19:54 UTC, Dimitry Andric
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitry Andric freebsd_committer freebsd_triage 2022-03-26 19:53:44 UTC
During an exp-run for llvm 14 (see bug 261742), it turned out that java/openjdk13 and java/openjdk17 fail to build with clang 14 (but this also affects openjdk14 through 16):

=== Output from failing command(s) repeated here ===
* For target hotspot_variant-server_libjvm_objs_serviceThread.o:
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
      while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
             ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
      while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
      while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
/wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
      while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ... (rest of output omitted)

Although the warning is normally an indication of a potential problem, in this case a comment just before the affected code explictly mentions the reason for using bitwise '|' instead of logical '||':

      // Process all available work on each (outer) iteration, rather than
      // only the first recognized bit of work, to avoid frequently true early
      // tests from potentially starving later work.  Hence the use of
      // arithmetic-or to combine results; we don't want short-circuiting.

(See https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/serviceThread.cpp#L140 )

Therefore, we should suppress -Wbitwise-instead-of-logical for clang 14 and higher.
Comment 1 Dimitry Andric freebsd_committer freebsd_triage 2022-03-26 19:54:27 UTC
Created attachment 232749 [details]
Add -Wno-bitwise-instead-of-logical for clang >= 14
Comment 2 Dimitry Andric freebsd_committer freebsd_triage 2022-04-03 18:51:35 UTC
Ping, this should go in, so we can unblock bug 261742. :)
Comment 3 Mikael Urankar freebsd_committer freebsd_triage 2022-04-04 05:52:20 UTC
(In reply to Dimitry Andric from comment #2)
Approved by: portmgr (build fix blanket)

I can commit it if you want.
Comment 4 commit-hook freebsd_committer freebsd_triage 2022-04-04 08:10:18 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=e406118f774154589b91dc8d84f7f0320766d5a4

commit e406118f774154589b91dc8d84f7f0320766d5a4
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2022-03-26 19:47:44 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2022-04-04 07:56:40 +0000

    java/openjdk13 java/openjdk14 java/openjdk15 java/openjdk16 java/openjdk17 java/openjdk17-jre: fix build with clang 14

    During an exp-run for llvm 14 (see bug 261742), it turned out that
    java/openjdk13 and java/openjdk17 fail to build with clang 14 (but this
    also affects openjdk14 through 16):

    === Output from failing command(s) repeated here ===
    * For target hotspot_variant-server_libjvm_objs_serviceThread.o:
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
          while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
                 ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
          while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
          while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: note: cast one or both operands to int to silence this warning
    /wrkdirs/usr/ports/java/openjdk13/work/jdk13u-jdk-13.0.10-5-1/src/hotspot/share/runtime/serviceThread.cpp:133:15: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
          while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       ... (rest of output omitted)

    Although the warning is normally an indication of a potential problem,
    in this case a comment just before the affected code explictly mentions
    the reason for using bitwise '|' instead of logical '||':

          // Process all available work on each (outer) iteration, rather than
          // only the first recognized bit of work, to avoid frequently true early
          // tests from potentially starving later work.  Hence the use of
          // arithmetic-or to combine results; we don't want short-circuiting.

    (See
    <https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/serviceThread.cpp#L140>)

    Therefore, we should suppress -Wbitwise-instead-of-logical for clang 14
    and higher.

    PR:             262845
    Approved by:    portmgr (build fix blanket)
    MFH:            2022Q2

 java/openjdk13/Makefile | 7 ++++++-
 java/openjdk14/Makefile | 7 ++++++-
 java/openjdk15/Makefile | 7 ++++++-
 java/openjdk16/Makefile | 7 ++++++-
 java/openjdk17/Makefile | 7 ++++++-
 5 files changed, 30 insertions(+), 5 deletions(-)