1. '-Wdeprecated-copy'
As specified in C++11 [1], "the generation of the implicitly-defined
copy constructor is deprecated if T has a user-defined destructor or
user-defined copy assignment operator". The rationale behind is the
well-known Rule of Three [2].

Introduced since gcc-9 [3] and clang-10 [4], flag '-Wdeprecated-copy'
warns about the C++11 deprecation of implicitly declared copy
constructor and assignment operator if one of them is user-provided.
Defining an explicit copy constructor would suppress this warning.

The main reason why debug build with gcc-9 or higher succeeds lies in
the inconsistent warning behaviors between gcc and clang. See the
reduced code example [5]. We suspect it might be return value
optimization/copy elision [6] that drives gcc not to declare implicit
copy constructor for this case.

Note that flag '-Wdeprecated' in clang-8 and clang-9 would also raise
warnings for deprecated defintions of copy constructors. However,
'-Wdeprecated' is not enabled by '-Wall' or '-Wextra'. Hence, clang-8
and clang-9 are not affected.

2. '-Wimplicit-int-float-conversion'
Making the conversion explicit would fix it.

Flag '-Wimplicit-int-float-conversion' is first introduced in clang-10.
Therefore clang-8 and clang-9 are not affected. The flag with similar
functionality in gcc is '-Wfloat-conversion', but it is not enabled by
'-Wall' or '-Wextra'. That's why this warning does not apprear when
building with gcc.

[1] https://en.cppreference.com/w/cpp/language/copy_constructor
[2] https://en.cppreference.com/w/cpp/language/rule_of_three
[3] https://www.gnu.org/software/gcc/gcc-9/changes.html
[4] https://releases.llvm.org/10.0.0/tools/clang/docs/ReleaseNotes.html
[5] https://godbolt.org/z/err4jM
[6] https://en.wikipedia.org/wiki/Copy_elision#Return_value_optimization


Note that we have tested with this patch, debug build succeeded with clang-10 
on Linux X86/AArch64 machines.

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

Commit messages:
 - 8258010: Debug build failure with clang-10 due to -Wdeprecated-copy and 
-Wimplicit-int-float-conversion

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

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

Reply via email to