RFR: 8257928: Test image build failure with clang-10 due to -Wmisleading-indentation

Hao Sun github.com+16932759+shqking at openjdk.java.net
Wed Dec 9 07:16:44 UTC 2020


Flag '-Wmisleading-indentation' was introduced since clang-10 [1] and
gcc-6 [2]. Putting the code with proper indentations would suppress this
warning.

The main reason why test image build with gcc succeeds is that, clang
and gcc might behave differently for some corner cases under
'-Wmisleading-indentation'.

The following code snippet is crafted based on this build failure, where
each statement with improper indentation (line A and line B) follows an
if-statement. The key difference between foo() and bar() lies in that
there exists an extra comment, i.e. "/* comment 2 */", between statement
at line A and the if-statement.

    int foo(int num) {
      /* comment 1 */
      if (num > 1)
        return 0;

      /* comment 2 */
        num = num + 1;  // line A
      return num;
    }

    int bar(int val) {
      /* comment 3 */
      if (val > 1)
        return 0;

        val = val + 1;  // line B
      return val;
    }

It's worth noting that foo() is quite similar to the erroneous code in
this build failure. Clang-10 would emit misleading indentation warnings
for both foo() and bar(), whereas gcc-6 or higher considers foo() free
of problems. [3]

This patch is a complement to JDK-8253892. In JDK-8253892, flag
'-Wmisleading-indentation' is disabled for both clang and gcc when
building JRE and JDK images. This patch does not disable the flag for
test image building, but just fixes the code, becasue:
  - only a small number of warnings are produced and it's easy to fix
  them one by one.
  - inconsistent warning behaviors between gcc and clang are triggered
  by this case and simply disabling the flag does not work.

Note that AArch64 is NOT tested because test image build still fails
after this bug is fixed due to another runtime error (See JDK-8257936),
which is not related to this patch.

[1] https://releases.llvm.org/10.0.0/tools/clang/docs/DiagnosticsReference.html
[2] https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/Warning-Options.html#Warning-Options
[3] https://godbolt.org/z/xs6xWv

---------------------
We have tested with this patch, the test image can be built successfully with clang-10 on X86 machine.

-------------

Commit messages:
 - 8257928: Test image build failure with clang-10 due to -Wmisleading-indentation

Changes: https://git.openjdk.java.net/jdk/pull/1709/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1709&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8257928
  Stats: 8 lines in 4 files changed: 0 ins; 0 del; 8 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1709.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1709/head:pull/1709

PR: https://git.openjdk.java.net/jdk/pull/1709


More information about the serviceability-dev mailing list