Hi I read >>>> It’d be much better and reliable to fix makefiles to always use >>>> ‘disable-warning-as-errors’ when ‘enable-native-coverage’ is used. It >>>> should be pretty straightforward to do.
as you propose not to fix false positive warnings but fix make files instead. Because warnings in macroAssembler_x86 and genCollectedHeap are false positive. gcc without -fno-profile have enough information to verify that variables are initialized and don't produce warning. So my fixes doesn't make code much better. Leonid > On Aug 30, 2018, at 11:36 AM, Igor Ignatyev <igor.ignat...@oracle.com> wrote: > > Hi, > > my claim was based on the warnings which we were getting when we just > introduced code coverage builds in JDK 9, e.g. 8130790[1] (clobbered warning > in libt2k). these warnings haven't been seen w/o code coverage enabled, and > enabling coverage changes code path, so I don't think we should care much > about these warnings. > > I ain't saying that Leonid's fixes are wrong, I definitely support his > changes in macroAssembler_x86 and genCollectedHeap (can't comment on > splashscreen_png.c as I don't really understand what gcc complains there), > I'm saying that b/c coverage-enabled builds aren't built often enough and > warnings from these builds will always be low-priority bugs, I believe that > such instrumented must be produced w/ warnings-as-errors disabled. > > [1] https://bugs.openjdk.java.net/browse/JDK-8130790 > > Thanks, > -- Igor > > >> On Aug 30, 2018, at 6:26 AM, Erik Joelsson <erik.joels...@oracle.com> wrote: >> >> Hello, >> >> On 2018-08-30 02:22, Magnus Ihse Bursie wrote: >>> >>> >>> On 2018-08-24 00:44, Igor Ignatev wrote: >>>> Hi Leonid, >>>> >>>> We have never supported native code coverage builds with warnings enabled >>>> as errors. There are bugs in gcc which cause false positive warnings, so >>>> it was decided to ignore all warnings from instrumented builds. It’d be >>>> much better and reliable to fix makefiles to always use >>>> ‘disable-warning-as-errors’ when ‘enable-native-coverage’ is used. It >>>> should be pretty straightforward to do. >>> I disagree. >>> >>> While it is simple to change the build to disable warnings as error when >>> building with code coverage, I think hard-coding this into the build system >>> is a step backwards :-( and not something I want to support. >>> >> I shared your opinion at first while discussing this offline with Leonid. >> What changed my mind was the claim that the warnings cannot be truly trusted >> when GCC is generating code coverage data. If that is true, then having >> warnings as errors turned on then serves no purpose. The majority of builds >> will be without code coverage enabled, so we will still get ample protection >> against warnings in the code. >>> The code changes suggested by Leonid seems trivial and benign, and helps >>> readability, even apart from fixing compiler warnings. >>> >>> If this is deemed unacceptable, it's better to disable those few warnings >>> specifically, for the files/libraries they occur in. >>> >> If the claim on the warnings produced by GCC while generating code coverage >> is false, then I certainly agree that the warnings should be fixed instead. >> >> /Erik >>> /Magnus >>> >>> >>>> >>>> cc’ing build alias. >>>> >>>> Cheers, >>>> — Igor >>>> >>>>> On Aug 23, 2018, at 2:37 PM, Vladimir Kozlov <vladimir.koz...@oracle.com> >>>>> wrote: >>>>> >>>>> macroassembler changes are good. >>>>> >>>>> Thanks, >>>>> Vladimir >>>>> >>>>>> On 8/23/18 1:51 PM, Leonid Mesnik wrote: >>>>>> Hi >>>>>> Could you please review following fix which fix code so gcc doesn't >>>>>> complain when JDK is build with enabled native code coverage. >>>>>> webrev: http://cr.openjdk.java.net/~lmesnik/8209520/webrev.00/ >>>>>> <http://cr.openjdk.java.net/%7Elmesnik/8209520/webrev.00/> >>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8209520 >>>>>> These warning appeared because of change optimization settings used for >>>>>> getting code coverage. >>>>>> 1) src/hotspot/cpu/x86/macroAssembler_x86.cpp, >>>>>> src/hotspot/share/gc/shared/genCollectedHeap.cpp >>>>>> gcc complained about uninitialized variables, like >>>>>> * For target hotspot_variant-server_libjvm_objs_macroAssembler_x86.o: >>>>>> /home/lmesnik/ws/jdk-8209520/open/src/hotspot/cpu/x86/macroAssembler_x86.cpp: >>>>>> In member function 'void ControlWord::print() const': >>>>>> /home/lmesnik/ws/jdk-8209520/open/src/hotspot/cpu/x86/macroAssembler_x86.cpp:5769:11: >>>>>> error: 'pc' may be used uninitialized in this function >>>>>> [-Werror=maybe-uninitialized] >>>>>> printf("%04x masks = %s, %s, %s", _value & 0xFFFF, f, rc, pc); >>>>>> ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>> /home/lmesnik/ws/jdk-8209520/open/src/hotspot/cpu/x86/macroAssembler_x86.cpp:5769:11: >>>>>> error: 'rc' may be used uninitialized in this function >>>>>> [-Werror=maybe-uninitialized] >>>>>> So I just fixed codepath to show more explicitly that variables are >>>>>> initialized before usage. >>>>>> 2) src/java.desktop/share/native/libsplashscreen/splashscreen_png.c: >>>>>> The changes to prevent waning about clobbering in splashscreen_png.c are >>>>>> similar to fix in: >>>>>> 1. JDK-8080695 <https://bugs.openjdk.java.net/browse/JDK-8080695> >>>>>> splashscreen_png.c compile error with gcc 4.9.2 >>>>>> The another approach would be to fix build to ignore these warnings for >>>>>> code coverage build. While I think it makes build system even more >>>>>> complicated. >>>>>> Leonid >>> >> >