>>>>> Stephen Wade writes: Thanks to everyone so far.
Indeed, packages GenomeAdmixR SpatialKWD literanger all give the same include/c++/14/bits/stl_algobase.h:452:30 -Warray-bounds= warning for the GCC 14.2.0 compilers used for Debian testing and windows, but not for GCC 15.1.0 used for Fedora, and also not for gcc-snapshot on Debian testing (which shows its version as 16.0.0 20250502). So I will close the issues reported for these packages. Of course, if there was a simple workaround it would be great to use this, as we cannot (easily) work around the WARNINGs for the submission checks. Best -k > Thanks, I agree with the course of action, especially given literanger > seems to be the only casualty. I'm just making note that the policy > doesn't necessarily generate the outcome we want. No policy ever will! > I 100% appreciate CRAN volunteers' efforts. > In this case, the compiler is generating a false positive - I'm > reasonably sure of this having looked at the assembly generated. The > kludge doesn't make the library perform 'as expected' on more systems > => the kludge means the _compiler_ performs 'as expected' (on more > systems). With the kludge: the code will perform marginally worse at > run time => we are trading some runtime performance to avoid a > (build-time) bug confined to the build tools, and it takes additional > effort to maintain. Such is life. > On Tue, May 13, 2025 at 11:34 AM Kevin Ushey <kevinus...@gmail.com> wrote: >> >> Hi Stephen, >> >> I still believe your best option is still to just submit a version of >> your package that includes a workaround for this compiler issue. >> >> You could, in theory, try to contact the CRAN maintainers at >> c...@r-project.org, and either (1) request an exception for your >> package, or (2) request that they update the compilers used so that >> this issue no longer occurs. However, the repository policy states: >> >> The time of the volunteers is CRAN’s most precious resource >> >> and so you're unlikely to be successful in petitioning for their time, >> even if your diagnosis of the issue is correct. Especially so now, >> since you have a workaround for the issue in question. (Of course, I >> could be wrong; I obviously cannot speak for them.) >> >> I would strongly recommend just biting your tongue and submitting a >> version of your package with the workaround. >> >> My own personal view: we must unfortunately accept that "good" code is >> not necessarily neat nor concise code, and I say this as someone who >> also hates having to write these sorts of kludges. However, what >> ultimately matters is whether your software works as expected on the >> systems where it is run; from that perspective, your kludge achieves >> that goal on more systems than your code would otherwise. >> >> Best, >> Kevin >> >> On Mon, May 12, 2025 at 5:32 PM Stephen Wade <stephematic...@gmail.com> >> wrote: >> > >> > After (a lot) more work, including looking for MWE (see >> > https://godbolt.org/z/38nnaEcrf), I am confident this is a bug which >> > has already been resolved: >> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111415. >> > >> > The bug only occurs when optimisation is enabled (-O1 to -O3 at >> > least), on GCC 12.4, 13.1--13.3, and 14.1--14.2. >> > >> > The question is "what is the correct remedy for the package on CRAN"? >> > Making the code _unnecessarily_ complicated compels GCC to avoid an >> > optimisation pattern that is causing the warning, e.g. >> > >> > inline std::vector<double> adjust_pvalues(const std::vector<double> & >> > unadjusted) { >> > >> > const size_t n_pvalue = unadjusted.size(); >> > if (n_pvalue < 2) { >> > #if ( __GNUC__ == 12 && __GNUC_MINOR__ > 3 && __GNUC_MINOR__ < 5 ) || \ >> > ( __GNUC__ == 13 && __GNUC_MINOR__ < 4 ) || \ >> > ( __GNUC__ == 14 && __GNUC_MINOR__ < 3 ) >> > std::vector<double> kludge(n_pvalue); >> > kludge = unadjusted; >> > return kludge; /* no warning produced */ >> > #else >> > return unadjusted; >> > #endif >> > } >> > >> > std::vector<double> adjusted(n_pvalue, 0); >> > /* Do some other stuff */ >> > return adjusted; >> > } >> > >> > That is _not_ "good" code practice (in my view). I would only put this >> > in a `cran_release` branch of the repository because it's not >> > something I'd like to see in `main`. That means a (manual) merge into >> > `cran_release` each time I release the package for the next few years >> > until CRAN uses compilers that don't produce that warning. Annoying, >> > but not a deal-breaker. All this tells me (not that it is a bad >> > policy) that the CRAN policy isn't always going to produce the best >> > outcome in terms of code practise (again, in my view). >> > >> > On Mon, May 12, 2025 at 10:02 PM Tomas Kalibera >> > <tomas.kalib...@gmail.com> wrote: >> > > >> > > >> > > On 5/9/25 03:09, Stephen Wade wrote: >> > > > The literanger package is no longer passing on CRAN >> > > > (https://CRAN.R-project.org/package=literanger) due to array-bound >> > > > warnings in GCC 13.3 and 14.2 (more details below). >> > > > >> > > > This _looks_ to me like one of either a) a compiler bug, b) a false >> > > > positive, or c) (very unlikely) something in the standard library >> > > > implementation. >> > > > >> > > > Have others seen warnings like this recently, and if so, what have you >> > > > done about them? The warning did not appear in clang, nor with GCC >> > > > 15.1.0 on CRAN's Fedora test service. >> > > > >> > > > Firstly, the relevant code snippet: >> > > > >> > > > /** Compute adjusted p-values using Benjamini/Hochberg method */ >> > > > inline std::vector<double> adjust_pvalues(const std::vector<double> & >> > > > unadjusted) { >> > > > >> > > > const size_t n_pvalue = unadjusted.size(); >> > > > if (n_pvalue < 2) return unadjusted; /* <-- WARNING HERE */ >> > > > >> > > > std::vector<double> adjusted(n_pvalue, 0); >> > > > /* Do some other stuff */ >> > > > return adjusted; >> > > > >> > > > } >> > > > >> > > > >> > > > Secondly, the warning (on my own machine, using GCC 13.2.0, which also >> > > > has this problem): >> > > > >> > > > inlined from ‘std::vector<double> literanger::adjust_pvalues(const >> > > > std::vector<double>&)’ at ../src/literanger/utility_math.h:99:48: >> > > > /usr/include/c++/13/bits/stl_algobase.h:437:30: warning: ‘void* >> > > > __builtin_memmove(void*, const void*, long unsigned int)’ writing >> > > > between 9 and 9223372036854775807 bytes into a region of size 8 >> > > > overflows the destination [-Wstringop-overflow=] >> > > > 437 | __builtin_memmove(__result, __first, sizeof(_Tp) >> > > > * _Num); >> > > >> > > Perhaps you could try creating a minimal reproducible example, >> > > standalone C++ program, which still reproduces the warning, and report >> > > to GCC (or libstdc++). You may get a response it is a duplicate of the >> > > bug Ivan identified, but it still might be useful to have that >> > > confirmed. It might also become clearer which problem the compiler seems >> > > to see there - so give a hint for a workaround. >> > > >> > > Even if it gets confirmed as a compiler bug, it might be useful to work >> > > it around when possible so that your code builds cleanly, particularly >> > > if it doesn't complicate the code much. We are doing the same thing with >> > > various warnings in base R - we try to simplify/change the code to help >> > > the compiler see it is correct. Also, sometimes one finds on the way >> > > that there actually is a (sometimes theoretical but, still) problem. >> > > >> > > Once you have a minimal reproducible example it might also be easier to >> > > experiment with work-arounds. >> > > >> > > Best >> > > Tomas >> > > >> > > > >> > > > ______________________________________________ >> > > > R-devel@r-project.org mailing list >> > > > https://stat.ethz.ch/mailman/listinfo/r-devel >> > >> > ______________________________________________ >> > R-devel@r-project.org mailing list >> > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel