[libcxx-commits] [PATCH] D120630: [libc++] Explicitly reject URNG types with signed result_types.

Arthur O'Dwyer via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Sun Feb 27 09:01:41 PST 2022


Quuxplusone created this revision.
Quuxplusone added reviewers: ldionne, Mordante, libc++, mikkqu.
Quuxplusone added a project: libc++.
Quuxplusone requested review of this revision.
Herald added a subscriber: libcxx-commits.
Herald added 1 blocking reviewer(s): libc++.

Fixes https://github.com/llvm/llvm-project/issues/48965

At first I tried making one big .verify.cpp test for all the distributions, but it turned out that that had a problem: Some distributions depend on other distributions. So instantiating `lognormal_distribution::operator()` will produce an error inside `normal_distribution::operator()` as well as its "expected" error. This means that one distribution can trigger up to 7(!) static_asserts. And also, once `normal_distribution`'s assert has been triggered transitively by `lognormal_distribution`, well, now it's been instantiated, so it will //not// be triggered a second time when we get down to the place in the test where we actually want to test `normal_distribution`.

So, I've somewhat guiltily gone ahead and added a `bad_engine.verify.cpp` for every distribution individually. I placed it in `test/std/` because my impression is that `.verify.cpp` tests are run only on Clang+libc++ anyway; this isn't testing a libc++ //extension// per se, just a libc++-specific diagnostic for standard UB; and I didn't want to re-create the whole deeply nested directory structure in `test/libcxx/` just for this.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D120630

Files:
  libcxx/include/__random/bernoulli_distribution.h
  libcxx/include/__random/binomial_distribution.h
  libcxx/include/__random/cauchy_distribution.h
  libcxx/include/__random/discrete_distribution.h
  libcxx/include/__random/exponential_distribution.h
  libcxx/include/__random/extreme_value_distribution.h
  libcxx/include/__random/fisher_f_distribution.h
  libcxx/include/__random/gamma_distribution.h
  libcxx/include/__random/is_valid.h
  libcxx/include/__random/negative_binomial_distribution.h
  libcxx/include/__random/normal_distribution.h
  libcxx/include/__random/piecewise_constant_distribution.h
  libcxx/include/__random/piecewise_linear_distribution.h
  libcxx/include/__random/poisson_distribution.h
  libcxx/include/__random/student_t_distribution.h
  libcxx/include/__random/uniform_int_distribution.h
  libcxx/include/__random/uniform_real_distribution.h
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/bad_engine.verify.cpp
  libcxx/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/bad_engine.verify.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120630.411680.patch
Type: text/x-patch
Size: 35417 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220227/eb42ee7c/attachment-0001.bin>


More information about the libcxx-commits mailing list