Thanks! That's seems to be a nicer way to fix it, but remember that both gcc and clang define __GNUC__ so I think this patch should be more restrictive:
http://cr.openjdk.java.net/~ysuenaga/JDK-8232084/webrev.B1-pragma/src/hotspot/share/utilities/compilerWarnings_gcc.hpp.udiff.html <http://cr.openjdk.java.net/~ysuenaga/JDK-8232084/webrev.B1-pragma/src/hotspot/share/utilities/compilerWarnings_gcc.hpp.udiff.html> christos > On Oct 11, 2019, at 8:57 AM, Yasumasa Suenaga <suen...@oss.nttdata.com> wrote: > > Hi, > > I proposed 3 solutions in [1]. > > Plan B-1 is #pragma, but HotSpot provides valid macro to compiler. > I added stringop-truncation to it [2], and it would work each compilers. > > > Yasumasa > > > [1] > https://mail.openjdk.java.net/pipermail/serviceability-dev/2019-October/029580.html > [2] http://cr.openjdk.java.net/~ysuenaga/JDK-8232084/webrev.B1-pragma/ > > > On 2019/10/11 21:51, David Holmes wrote: >> On 11/10/2019 10:47 pm, Christos Zoulas wrote: >>> At NetBSD we decided to change the Makefiles because we compile with both >>> clang and gcc >>> and clang does not have those warnings and it complains about the pragmas. >> <sigh> Compilers are supposed to ignore pragmas they don't understand. >> Complaining about an unknown pragma defeats the whole purpose of having >> pragmas. >> I suppose to prevent problems with clang we must disable the warning in the >> makefile. >> David >>> christos >>> >>>> On Oct 11, 2019, at 2:54 AM, David Holmes <david.hol...@oracle.com> wrote: >>>> >>>> Yes I prefer: >>>> >>>> D. Use #pragma ... at the callsite to disable this particular diagnostic. >>>> >>>> over changing the makefiles. >>>> >>>> David >>>> >>>> On 11/10/2019 3:37 pm, Ioi Lam wrote: >>>>> For diagnosticArgument.cpp, I would prefer adding inline #pragma at only >>>>> the sites affected (as suggested by David Holmes), with a comment about >>>>> why this is necessary. >>>>> But if others decide to go with other solutions, that's fine with me, >>>>> too, but please remember to add a comment :-) >>>>> Thanks >>>>> - Ioi >>>>> On 10/10/19 6:50 PM, Chris Plummer wrote: >>>>>> These solutions all have their merits and their warts, but we have to >>>>>> pick something. I'm ok with with A or C. For B I'd rather you instead >>>>>> used the #pragma at the warning site. If you go with (C), the review >>>>>> should go out to all of hotspot-dev and build-dev. >>>>>> >>>>>> Chris >>>>>> >>>>>> On 10/10/19 6:34 PM, Yasumasa Suenaga wrote: >>>>>>> Hi, >>>>>>> >>>>>>> I want to get conclusion of this discussion. >>>>>>> >>>>>>> I understand the fix of macroAssembler_x86.hpp is ok, but we have not >>>>>>> yet had conclusion >>>>>>> how we should fix diagnosticArgument.cpp . >>>>>>> >>>>>>> I think we can fix diagnosticArgument.cpp as following: >>>>>>> >>>>>>> >>>>>>> A. Use memcpy() >>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8232084/webrev.02/ >>>>>>> >>>>>>> B. Add -Wno-stringop-truncation to >>>>>>> make/hotspot/lib/JvmOverrideFiles.gmk >>>>>>> This option will be added diagnosticArgument.cpp only. >>>>>>> >>>>>>> C. Set -Wno-stringop-truncation in globally >>>>>>> make/hotspot/lib/CompileJvm.gmk >>>>>>> >>>>>>> >>>>>>> I prefer to fix like A because it affects minimally. >>>>>>> Some issues might be found out by stringop-truncation in future. >>>>>>> >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Yasumasa >>>>>>> >>>>>>> >>>>>>> On 2019/10/11 5:54, Kim Barrett wrote: >>>>>>>>> On Oct 10, 2019, at 3:03 AM, David Holmes <david.hol...@oracle.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> On 10/10/2019 4:50 pm, Chris Plummer wrote: >>>>>>>>>> From JBS: >>>>>>>>>> /home/ysuenaga/OpenJDK/jdk/src/hotspot/share/services/diagnosticArgument.cpp:154:14: >>>>>>>>>> warning: 'char* strncpy(char*, const char*, size_t)' output >>>>>>>>>> truncated before terminating nul copying as many bytes from a string >>>>>>>>>> as its length [-Wstringop-truncation] >>>>>>>>>> 154 | strncpy(buf, str, len); >>>>>>>>>> | ~~~~~~~^~~~~~~~~~~~~~~ >>>>>>>>>> I assume this means that in all cases the "len" value is seen to be >>>>>>>>>> derived from strlen, and therefore strncpy is always copying one >>>>>>>>>> byte short of \0, and this is most likely not what the user wants. I >>>>>>>>>> seem to >>>>>>>>> >>>>>>>>> Yes but we then explicitly set the NULL at buf[len] which is the >>>>>>>>> expected/required pattern for this. >>>>>>>>> >>>>>>>>>> recall another recent similar fix that was done by switching to >>>>>>>>>> using memcpy instead. >>>>>>>>>> Here's a discussion of interest, also suggesting memcpy: >>>>>>>>>> https://stackoverflow.com/questions/50198319/gcc-8-wstringop-truncation-what-is-the-good-practice >>>>>>>>> >>>>>>>>> Seems to me that strncpy and memcpy are semantically equivalent here >>>>>>>>> so all this does is avoid gcc's over zealous warnings. I'm inclined >>>>>>>>> to use the: >>>>>>>>> >>>>>>>>> #pragma GCC diagnostic push >>>>>>>>> #pragma GCC diagnostic ignored "-Wstringop-truncation" >>>>>>>>> >>>>>>>>> solution. >>>>>>>>> >>>>>>>>> YMMV. >>>>>>>> >>>>>>>> We've run into and discussed problems with -Wstringop-truncation >>>>>>>> before. (See discussions of JDK-8214777 and JDK-8223186.) This is a >>>>>>>> relatively recent warning option (introduced in gcc8, and included in >>>>>>>> -Wall), and seems to have a considerable bug tail: >>>>>>>> >>>>>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88781 >>>>>>>> A metabug for -Wstringop-truncation, currently with 16 open and 10 >>>>>>>> resolved associated bugs. >>>>>>>> >>>>>>>> I'm not a fan of replacing correct and idiomatic uses of strncpy with >>>>>>>> strcpy or memcpy. I've suggested in the past that we should turn off >>>>>>>> this warning while it is so buggy. >>>>>>>> >>>>>> >>>>>> >>>