[libcxx-commits] [libcxx] [libc++][random] Applied `[[nodiscard]]` to `<random>` (PR #204970)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Sun Jun 21 12:53:33 PDT 2026


https://github.com/H-G-Hristov updated https://github.com/llvm/llvm-project/pull/204970

>From e6e037d8da9703b35b904c1673dbe5272b4d0429 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 21 Jun 2026 13:00:15 +0300
Subject: [PATCH] [libc++][random] Applied `[[nodiscard]]` to `<random>`

Towards: #172124

- https://libcxx.llvm.org/CodingGuidelines.html#apply-nodiscard-where-relevant
- https://wg21.link/rand
---
 .../include/__random/bernoulli_distribution.h |  14 +-
 .../include/__random/binomial_distribution.h  |  18 +-
 libcxx/include/__random/cauchy_distribution.h |  18 +-
 .../__random/chi_squared_distribution.h       |  14 +-
 .../include/__random/discard_block_engine.h   |  10 +-
 .../include/__random/discrete_distribution.h  |  14 +-
 .../__random/exponential_distribution.h       |  14 +-
 .../__random/extreme_value_distribution.h     |  18 +-
 .../include/__random/fisher_f_distribution.h  |  18 +-
 libcxx/include/__random/gamma_distribution.h  |  18 +-
 libcxx/include/__random/generate_canonical.h  |   2 +-
 .../include/__random/geometric_distribution.h |  14 +-
 .../__random/independent_bits_engine.h        |   8 +-
 .../__random/linear_congruential_engine.h     |   8 +-
 .../include/__random/lognormal_distribution.h |  18 +-
 .../__random/mersenne_twister_engine.h        |   8 +-
 .../__random/negative_binomial_distribution.h |  18 +-
 libcxx/include/__random/normal_distribution.h |  18 +-
 .../piecewise_constant_distribution.h         |  18 +-
 .../__random/piecewise_linear_distribution.h  |  18 +-
 .../include/__random/poisson_distribution.h   |  14 +-
 libcxx/include/__random/random_device.h       |   8 +-
 libcxx/include/__random/seed_seq.h            |   4 +-
 .../include/__random/shuffle_order_engine.h   |  10 +-
 .../include/__random/student_t_distribution.h |  14 +-
 .../__random/subtract_with_carry_engine.h     |   8 +-
 .../__random/uniform_int_distribution.h       |  18 +-
 .../__random/uniform_real_distribution.h      |  18 +-
 .../include/__random/weibull_distribution.h   |  18 +-
 .../libcxx/numerics/rand/nodiscard.verify.cpp | 605 ++++++++++++++++++
 .../bad_engine.verify.cpp                     |   4 +-
 .../rand.dist.bern.bin/bad_engine.verify.cpp  |   4 +-
 .../rand.dist.bern.geo/bad_engine.verify.cpp  |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../rand.dist.norm.f/bad_engine.verify.cpp    |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../rand.dist.norm.t/bad_engine.verify.cpp    |   4 +-
 .../rand.dist.pois.exp/bad_engine.verify.cpp  |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../bad_engine.verify.cpp                     |   4 +-
 .../rand.dist.uni.int/bad_engine.verify.cpp   |   4 +-
 .../rand.dist.uni.real/bad_engine.verify.cpp  |   4 +-
 50 files changed, 844 insertions(+), 239 deletions(-)
 create mode 100644 libcxx/test/libcxx/numerics/rand/nodiscard.verify.cpp

diff --git a/libcxx/include/__random/bernoulli_distribution.h b/libcxx/include/__random/bernoulli_distribution.h
index 8d1bfad9e7d29..54ca0ee0f7504 100644
--- a/libcxx/include/__random/bernoulli_distribution.h
+++ b/libcxx/include/__random/bernoulli_distribution.h
@@ -36,7 +36,7 @@ class bernoulli_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(double __p = 0.5) : __p_(__p) {}
 
-    _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__p_ == __y.__p_;
@@ -60,20 +60,20 @@ class bernoulli_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return false; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return true; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return false; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return true; }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const bernoulli_distribution& __x, const bernoulli_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/binomial_distribution.h b/libcxx/include/__random/binomial_distribution.h
index 76996abacb3ac..e4fe92143741a 100644
--- a/libcxx/include/__random/binomial_distribution.h
+++ b/libcxx/include/__random/binomial_distribution.h
@@ -45,8 +45,8 @@ class binomial_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __t = 1, double __p = 0.5);
 
-    _LIBCPP_HIDE_FROM_ABI result_type t() const { return __t_; }
-    _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type t() const { return __t_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__t_ == __y.__t_ && __x.__p_ == __y.__p_;
@@ -74,21 +74,21 @@ class binomial_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type t() const { return __p_.t(); }
-  _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type t() const { return __p_.t(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return t(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return t(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const binomial_distribution& __x, const binomial_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/cauchy_distribution.h b/libcxx/include/__random/cauchy_distribution.h
index 0ad887dd8d645..65e83095c5445 100644
--- a/libcxx/include/__random/cauchy_distribution.h
+++ b/libcxx/include/__random/cauchy_distribution.h
@@ -43,8 +43,8 @@ class cauchy_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __a = 0, result_type __b = 1) : __a_(__a), __b_(__b) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
-    _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__a_ == __y.__a_ && __x.__b_ == __y.__b_;
@@ -70,21 +70,21 @@ class cauchy_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const cauchy_distribution& __x, const cauchy_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/chi_squared_distribution.h b/libcxx/include/__random/chi_squared_distribution.h
index 4ce2c17c354c5..8088dfe9d65bd 100644
--- a/libcxx/include/__random/chi_squared_distribution.h
+++ b/libcxx/include/__random/chi_squared_distribution.h
@@ -41,7 +41,7 @@ class chi_squared_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __n = 1) : __n_(__n) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__n_ == __y.__n_;
@@ -65,22 +65,22 @@ class chi_squared_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
     return gamma_distribution<result_type>(__p.n() / 2, 2)(__g);
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const chi_squared_distribution& __x, const chi_squared_distribution& __y) {
diff --git a/libcxx/include/__random/discard_block_engine.h b/libcxx/include/__random/discard_block_engine.h
index a6e1997fc1c2d..ba9dae56806d9 100644
--- a/libcxx/include/__random/discard_block_engine.h
+++ b/libcxx/include/__random/discard_block_engine.h
@@ -54,8 +54,8 @@ class discard_block_engine {
   static constexpr result_type _Max = _Engine::max();
 #endif
 
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Engine::min(); }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Engine::max(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Engine::min(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Engine::max(); }
 
   // constructors and seeding functions
   _LIBCPP_HIDE_FROM_ABI discard_block_engine() : __n_(0) {}
@@ -83,14 +83,14 @@ class discard_block_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()();
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()();
   _LIBCPP_HIDE_FROM_ABI void discard(unsigned long long __z) {
     for (; __z; --__z)
-      operator()();
+      (void)operator()();
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
 
   template <class _Eng, size_t _Pp, size_t _Rp>
   friend bool
diff --git a/libcxx/include/__random/discrete_distribution.h b/libcxx/include/__random/discrete_distribution.h
index 528de4245ef51..1ade6fd8bf1af 100644
--- a/libcxx/include/__random/discrete_distribution.h
+++ b/libcxx/include/__random/discrete_distribution.h
@@ -52,7 +52,7 @@ class discrete_distribution {
     template <class _UnaryOperation>
     _LIBCPP_HIDE_FROM_ABI param_type(size_t __nw, double __xmin, double __xmax, _UnaryOperation __fw);
 
-    _LIBCPP_HIDE_FROM_ABI vector<double> probabilities() const;
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<double> probabilities() const;
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__p_ == __y.__p_;
@@ -92,20 +92,20 @@ class discrete_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI vector<double> probabilities() const { return __p_.probabilities(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<double> probabilities() const { return __p_.probabilities(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__p_.size(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__p_.size(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const discrete_distribution& __x, const discrete_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/exponential_distribution.h b/libcxx/include/__random/exponential_distribution.h
index a5ce6ce332f9f..17f566ec6a2f8 100644
--- a/libcxx/include/__random/exponential_distribution.h
+++ b/libcxx/include/__random/exponential_distribution.h
@@ -43,7 +43,7 @@ class exponential_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __lambda = 1) : __lambda_(__lambda) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type lambda() const { return __lambda_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type lambda() const { return __lambda_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__lambda_ == __y.__lambda_;
@@ -67,20 +67,20 @@ class exponential_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type lambda() const { return __p_.lambda(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type lambda() const { return __p_.lambda(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const exponential_distribution& __x, const exponential_distribution& __y) {
diff --git a/libcxx/include/__random/extreme_value_distribution.h b/libcxx/include/__random/extreme_value_distribution.h
index 26d4bc67c2b60..e59079b7d6c22 100644
--- a/libcxx/include/__random/extreme_value_distribution.h
+++ b/libcxx/include/__random/extreme_value_distribution.h
@@ -43,8 +43,8 @@ class extreme_value_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __a = 0, result_type __b = 1) : __a_(__a), __b_(__b) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
-    _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__a_ == __y.__a_ && __x.__b_ == __y.__b_;
@@ -70,21 +70,21 @@ class extreme_value_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const extreme_value_distribution& __x, const extreme_value_distribution& __y) {
diff --git a/libcxx/include/__random/fisher_f_distribution.h b/libcxx/include/__random/fisher_f_distribution.h
index 84362fd0b4414..f36817dea5030 100644
--- a/libcxx/include/__random/fisher_f_distribution.h
+++ b/libcxx/include/__random/fisher_f_distribution.h
@@ -42,8 +42,8 @@ class fisher_f_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __m = 1, result_type __n = 1) : __m_(__m), __n_(__n) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type m() const { return __m_; }
-    _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type m() const { return __m_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__m_ == __y.__m_ && __x.__n_ == __y.__n_;
@@ -69,21 +69,21 @@ class fisher_f_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type m() const { return __p_.m(); }
-  _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type m() const { return __p_.m(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const fisher_f_distribution& __x, const fisher_f_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/gamma_distribution.h b/libcxx/include/__random/gamma_distribution.h
index 10a6cb8a8eb2c..aa418fd66702e 100644
--- a/libcxx/include/__random/gamma_distribution.h
+++ b/libcxx/include/__random/gamma_distribution.h
@@ -45,8 +45,8 @@ class gamma_distribution {
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __alpha = 1, result_type __beta = 1)
         : __alpha_(__alpha), __beta_(__beta) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type alpha() const { return __alpha_; }
-    _LIBCPP_HIDE_FROM_ABI result_type beta() const { return __beta_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type alpha() const { return __alpha_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type beta() const { return __beta_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__alpha_ == __y.__alpha_ && __x.__beta_ == __y.__beta_;
@@ -72,21 +72,21 @@ class gamma_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type alpha() const { return __p_.alpha(); }
-  _LIBCPP_HIDE_FROM_ABI result_type beta() const { return __p_.beta(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type alpha() const { return __p_.alpha(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type beta() const { return __p_.beta(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const gamma_distribution& __x, const gamma_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/generate_canonical.h b/libcxx/include/__random/generate_canonical.h
index 738de1517e286..091ff92dfa144 100644
--- a/libcxx/include/__random/generate_canonical.h
+++ b/libcxx/include/__random/generate_canonical.h
@@ -27,7 +27,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 // generate_canonical
 
 template <class _RealType, size_t __bits, class _URNG>
-_LIBCPP_HIDE_FROM_ABI _RealType generate_canonical(_URNG& __g) {
+[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _RealType generate_canonical(_URNG& __g) {
   const size_t __dt = numeric_limits<_RealType>::digits;
   const size_t __b  = __dt < __bits ? __dt : __bits;
 #ifdef _LIBCPP_CXX03_LANG
diff --git a/libcxx/include/__random/geometric_distribution.h b/libcxx/include/__random/geometric_distribution.h
index c04ec2acb5607..bb50e34592717 100644
--- a/libcxx/include/__random/geometric_distribution.h
+++ b/libcxx/include/__random/geometric_distribution.h
@@ -40,7 +40,7 @@ class geometric_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(double __p = 0.5) : __p_(__p) {}
 
-    _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__p_ == __y.__p_;
@@ -64,22 +64,22 @@ class geometric_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
     return negative_binomial_distribution<result_type>(1, __p.p())(__g);
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const geometric_distribution& __x, const geometric_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/independent_bits_engine.h b/libcxx/include/__random/independent_bits_engine.h
index c8faa9a5bfa46..ae99eba311b49 100644
--- a/libcxx/include/__random/independent_bits_engine.h
+++ b/libcxx/include/__random/independent_bits_engine.h
@@ -82,8 +82,8 @@ class independent_bits_engine {
   static_assert(_Min < _Max, "independent_bits_engine invalid parameters");
 
   // engine characteristics
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
 
   // constructors and seeding functions
   _LIBCPP_HIDE_FROM_ABI independent_bits_engine() {}
@@ -105,7 +105,7 @@ class independent_bits_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()() {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()() {
     if _LIBCPP_CONSTEXPR (_Rp != 0) {
       result_type __sp = 0;
       for (size_t __k = 0; __k < __n0; ++__k) {
@@ -134,7 +134,7 @@ class independent_bits_engine {
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
 
   template <class _Eng, size_t _Wp, class _UInt>
   friend bool operator==(const independent_bits_engine<_Eng, _Wp, _UInt>& __x,
diff --git a/libcxx/include/__random/linear_congruential_engine.h b/libcxx/include/__random/linear_congruential_engine.h
index 0c0bc42a5cbfa..03beea93050e4 100644
--- a/libcxx/include/__random/linear_congruential_engine.h
+++ b/libcxx/include/__random/linear_congruential_engine.h
@@ -254,8 +254,8 @@ class linear_congruential_engine {
   static inline _LIBCPP_CONSTEXPR const result_type multiplier = __a;
   static inline _LIBCPP_CONSTEXPR const result_type increment  = __c;
   static inline _LIBCPP_CONSTEXPR const result_type modulus    = __m;
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
   static inline _LIBCPP_CONSTEXPR const result_type default_seed = 1u;
 
   // constructors and seeding functions
@@ -296,12 +296,12 @@ class linear_congruential_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()() {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()() {
     return __x_ = static_cast<result_type>(__lce_ta<__a, __c, __m, _Mp>::next(__x_));
   }
   _LIBCPP_HIDE_FROM_ABI void discard(unsigned long long __z) {
     for (; __z; --__z)
-      operator()();
+      (void)operator()();
   }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
diff --git a/libcxx/include/__random/lognormal_distribution.h b/libcxx/include/__random/lognormal_distribution.h
index e6ca5b4612a2d..a94918a6a6a44 100644
--- a/libcxx/include/__random/lognormal_distribution.h
+++ b/libcxx/include/__random/lognormal_distribution.h
@@ -43,8 +43,8 @@ class lognormal_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __m = 0, result_type __s = 1) : __m_(__m), __s_(__s) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type m() const { return __m_; }
-    _LIBCPP_HIDE_FROM_ABI result_type s() const { return __s_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type m() const { return __m_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type s() const { return __s_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__m_ == __y.__m_ && __x.__s_ == __y.__s_;
@@ -68,28 +68,28 @@ class lognormal_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return std::exp(__nd_(__g));
   }
 
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
     typename normal_distribution<result_type>::param_type __pn(__p.m(), __p.s());
     return std::exp(__nd_(__g, __pn));
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type m() const { return __nd_.mean(); }
-  _LIBCPP_HIDE_FROM_ABI result_type s() const { return __nd_.stddev(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type m() const { return __nd_.mean(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type s() const { return __nd_.stddev(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return param_type(__nd_.mean(), __nd_.stddev()); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return param_type(__nd_.mean(), __nd_.stddev()); }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) {
     typename normal_distribution<result_type>::param_type __pn(__p.m(), __p.s());
     __nd_.param(__pn);
   }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const lognormal_distribution& __x, const lognormal_distribution& __y) {
     return __x.__nd_ == __y.__nd_;
diff --git a/libcxx/include/__random/mersenne_twister_engine.h b/libcxx/include/__random/mersenne_twister_engine.h
index 7e26e9987ed92..ce82b3387dbd2 100644
--- a/libcxx/include/__random/mersenne_twister_engine.h
+++ b/libcxx/include/__random/mersenne_twister_engine.h
@@ -161,8 +161,8 @@ class mersenne_twister_engine {
   static inline _LIBCPP_CONSTEXPR const result_type tempering_c               = __c;
   static inline _LIBCPP_CONSTEXPR const size_t tempering_l                    = __l;
   static inline _LIBCPP_CONSTEXPR const result_type initialization_multiplier = __f;
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
   static inline _LIBCPP_CONSTEXPR const result_type default_seed = 5489u;
 
   // constructors and seeding functions
@@ -206,7 +206,7 @@ class mersenne_twister_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()() {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()() {
     const size_t __j         = (__i_ + 1) % __n;
     const result_type __mask = __r == _Dt ? result_type(~0) : (result_type(1) << __r) - result_type(1);
     const result_type __yp   = (__x_[__i_] & ~__mask) | (__x_[__j] & __mask);
@@ -221,7 +221,7 @@ class mersenne_twister_engine {
 
   _LIBCPP_HIDE_FROM_ABI void discard(unsigned long long __z) {
     for (; __z; --__z)
-      operator()();
+      (void)operator()();
   }
 
   template <class _UInt,
diff --git a/libcxx/include/__random/negative_binomial_distribution.h b/libcxx/include/__random/negative_binomial_distribution.h
index 610a02445a1bc..af7de78f49dde 100644
--- a/libcxx/include/__random/negative_binomial_distribution.h
+++ b/libcxx/include/__random/negative_binomial_distribution.h
@@ -44,8 +44,8 @@ class negative_binomial_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __k = 1, double __p = 0.5) : __k_(__k), __p_(__p) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type k() const { return __k_; }
-    _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type k() const { return __k_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__k_ == __y.__k_ && __x.__p_ == __y.__p_;
@@ -70,21 +70,21 @@ class negative_binomial_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type k() const { return __p_.k(); }
-  _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type k() const { return __p_.k(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double p() const { return __p_.p(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const negative_binomial_distribution& __x, const negative_binomial_distribution& __y) {
diff --git a/libcxx/include/__random/normal_distribution.h b/libcxx/include/__random/normal_distribution.h
index a735d8307a3e0..4ebfd750a5f8a 100644
--- a/libcxx/include/__random/normal_distribution.h
+++ b/libcxx/include/__random/normal_distribution.h
@@ -44,8 +44,8 @@ class normal_distribution {
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __mean = 0, result_type __stddev = 1)
         : __mean_(__mean), __stddev_(__stddev) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type mean() const { return __mean_; }
-    _LIBCPP_HIDE_FROM_ABI result_type stddev() const { return __stddev_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type mean() const { return __mean_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type stddev() const { return __stddev_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__mean_ == __y.__mean_ && __x.__stddev_ == __y.__stddev_;
@@ -73,21 +73,21 @@ class normal_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type mean() const { return __p_.mean(); }
-  _LIBCPP_HIDE_FROM_ABI result_type stddev() const { return __p_.stddev(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type mean() const { return __p_.mean(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type stddev() const { return __p_.stddev(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const normal_distribution& __x, const normal_distribution& __y) {
     return __x.__p_ == __y.__p_ && __x.__v_hot_ == __y.__v_hot_ && (!__x.__v_hot_ || __x.__v_ == __y.__v_);
diff --git a/libcxx/include/__random/piecewise_constant_distribution.h b/libcxx/include/__random/piecewise_constant_distribution.h
index 3faf339325f74..54e327857c783 100644
--- a/libcxx/include/__random/piecewise_constant_distribution.h
+++ b/libcxx/include/__random/piecewise_constant_distribution.h
@@ -59,8 +59,8 @@ class piecewise_constant_distribution {
     _LIBCPP_HIDE_FROM_ABI param_type(param_type const&) = default;
     _LIBCPP_HIDE_FROM_ABI param_type& operator=(const param_type& __rhs);
 
-    _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __b_; }
-    _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __densities_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __densities_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__densities_ == __y.__densities_ && __x.__b_ == __y.__b_;
@@ -109,21 +109,21 @@ class piecewise_constant_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __p_.intervals(); }
-  _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __p_.densities(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __p_.intervals(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __p_.densities(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return __p_.__b_.front(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__b_.back(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return __p_.__b_.front(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__b_.back(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const piecewise_constant_distribution& __x, const piecewise_constant_distribution& __y) {
diff --git a/libcxx/include/__random/piecewise_linear_distribution.h b/libcxx/include/__random/piecewise_linear_distribution.h
index 8aa3f19ca9004..ddf6416704395 100644
--- a/libcxx/include/__random/piecewise_linear_distribution.h
+++ b/libcxx/include/__random/piecewise_linear_distribution.h
@@ -60,8 +60,8 @@ class piecewise_linear_distribution {
     _LIBCPP_HIDE_FROM_ABI param_type(param_type const&) = default;
     _LIBCPP_HIDE_FROM_ABI param_type& operator=(const param_type& __rhs);
 
-    _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __b_; }
-    _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __densities_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __densities_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__densities_ == __y.__densities_ && __x.__b_ == __y.__b_;
@@ -110,21 +110,21 @@ class piecewise_linear_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __p_.intervals(); }
-  _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __p_.densities(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> intervals() const { return __p_.intervals(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI vector<result_type> densities() const { return __p_.densities(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return __p_.__b_.front(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__b_.back(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return __p_.__b_.front(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return __p_.__b_.back(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const piecewise_linear_distribution& __x, const piecewise_linear_distribution& __y) {
diff --git a/libcxx/include/__random/poisson_distribution.h b/libcxx/include/__random/poisson_distribution.h
index 85398c751b453..118f148e9b6da 100644
--- a/libcxx/include/__random/poisson_distribution.h
+++ b/libcxx/include/__random/poisson_distribution.h
@@ -53,7 +53,7 @@ class poisson_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(double __mean = 1.0);
 
-    _LIBCPP_HIDE_FROM_ABI double mean() const { return __mean_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double mean() const { return __mean_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__mean_ == __y.__mean_;
@@ -79,20 +79,20 @@ class poisson_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI double mean() const { return __p_.mean(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI double mean() const { return __p_.mean(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::max(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const poisson_distribution& __x, const poisson_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/random_device.h b/libcxx/include/__random/random_device.h
index 17ca2fc7499d0..a8bb1e68e72f0 100644
--- a/libcxx/include/__random/random_device.h
+++ b/libcxx/include/__random/random_device.h
@@ -51,8 +51,8 @@ class _LIBCPP_EXPORTED_FROM_ABI random_device {
   static _LIBCPP_CONSTEXPR const result_type _Min = 0;
   static _LIBCPP_CONSTEXPR const result_type _Max = 0xFFFFFFFFu;
 
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
 
   // constructors
 #  ifndef _LIBCPP_CXX03_LANG
@@ -64,10 +64,10 @@ class _LIBCPP_EXPORTED_FROM_ABI random_device {
   ~random_device();
 
   // generating functions
-  result_type operator()();
+  [[__nodiscard__]] result_type operator()();
 
   // property functions
-  double entropy() const _NOEXCEPT;
+  [[__nodiscard__]] double entropy() const _NOEXCEPT;
 
   random_device(const random_device&)  = delete;
   void operator=(const random_device&) = delete;
diff --git a/libcxx/include/__random/seed_seq.h b/libcxx/include/__random/seed_seq.h
index b1ccc8329b8f9..f5748b7193048 100644
--- a/libcxx/include/__random/seed_seq.h
+++ b/libcxx/include/__random/seed_seq.h
@@ -56,7 +56,7 @@ class seed_seq {
   _LIBCPP_HIDE_FROM_ABI void generate(_RandomAccessIterator __first, _RandomAccessIterator __last);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI size_t size() const _NOEXCEPT { return __v_.size(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t size() const _NOEXCEPT { return __v_.size(); }
   template <class _OutputIterator>
   _LIBCPP_HIDE_FROM_ABI void param(_OutputIterator __dest) const {
     std::copy(__v_.begin(), __v_.end(), __dest);
@@ -65,7 +65,7 @@ class seed_seq {
   seed_seq(const seed_seq&)       = delete;
   void operator=(const seed_seq&) = delete;
 
-  _LIBCPP_HIDE_FROM_ABI static result_type _Tp(result_type __x) { return __x ^ (__x >> 27); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static result_type _Tp(result_type __x) { return __x ^ (__x >> 27); }
 
 private:
   template <class _InputIterator>
diff --git a/libcxx/include/__random/shuffle_order_engine.h b/libcxx/include/__random/shuffle_order_engine.h
index 72fd27042e724..3d8c323d096b5 100644
--- a/libcxx/include/__random/shuffle_order_engine.h
+++ b/libcxx/include/__random/shuffle_order_engine.h
@@ -76,8 +76,8 @@ class shuffle_order_engine {
   static _LIBCPP_CONSTEXPR const result_type _Max = _Engine::max();
 #endif
   static_assert(_Min < _Max, "shuffle_order_engine invalid parameters");
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
 
   static _LIBCPP_CONSTEXPR const unsigned long long _Rp = _Max - _Min + 1ull;
 
@@ -109,7 +109,7 @@ class shuffle_order_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()() {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()() {
     if _LIBCPP_CONSTEXPR (_Rp != 0 || !(__k & 1)) {
       using _Ratio = __uratio<__k, _Rp != 0 ? _Rp : 0x8000000000000000ull>;
       if _LIBCPP_CONSTEXPR (_Ratio::num > 0xFFFFFFFFFFFFFFFFull / (_Max - _Min)) {
@@ -126,11 +126,11 @@ class shuffle_order_engine {
 
   _LIBCPP_HIDE_FROM_ABI void discard(unsigned long long __z) {
     for (; __z; --__z)
-      operator()();
+      (void)operator()();
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const _Engine& base() const _NOEXCEPT { return __e_; }
 
 private:
   template <class _Eng, size_t _Kp>
diff --git a/libcxx/include/__random/student_t_distribution.h b/libcxx/include/__random/student_t_distribution.h
index dc199506862b8..16579962ce925 100644
--- a/libcxx/include/__random/student_t_distribution.h
+++ b/libcxx/include/__random/student_t_distribution.h
@@ -43,7 +43,7 @@ class student_t_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __n = 1) : __n_(__n) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __n_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__n_ == __y.__n_;
@@ -68,20 +68,20 @@ class student_t_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type n() const { return __p_.n(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return -numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const student_t_distribution& __x, const student_t_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/include/__random/subtract_with_carry_engine.h b/libcxx/include/__random/subtract_with_carry_engine.h
index 755c7d9346eb5..4f9b31a074ee0 100644
--- a/libcxx/include/__random/subtract_with_carry_engine.h
+++ b/libcxx/include/__random/subtract_with_carry_engine.h
@@ -75,8 +75,8 @@ class subtract_with_carry_engine {
   static inline _LIBCPP_CONSTEXPR const size_t word_size = __w;
   static inline _LIBCPP_CONSTEXPR const size_t short_lag = __s;
   static inline _LIBCPP_CONSTEXPR const size_t long_lag  = __r;
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
-  _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type min() { return _Min; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR result_type max() { return _Max; }
   static inline _LIBCPP_CONSTEXPR const result_type default_seed = 19780503u;
 
   // constructors and seeding functions
@@ -122,10 +122,10 @@ class subtract_with_carry_engine {
   }
 
   // generating functions
-  _LIBCPP_HIDE_FROM_ABI result_type operator()();
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()();
   _LIBCPP_HIDE_FROM_ABI void discard(unsigned long long __z) {
     for (; __z; --__z)
-      operator()();
+      (void)operator()();
   }
 
   template <class _UInt, size_t _Wp, size_t _Sp, size_t _Rp>
diff --git a/libcxx/include/__random/uniform_int_distribution.h b/libcxx/include/__random/uniform_int_distribution.h
index fa2c33755b739..22b172094d571 100644
--- a/libcxx/include/__random/uniform_int_distribution.h
+++ b/libcxx/include/__random/uniform_int_distribution.h
@@ -151,8 +151,8 @@ class uniform_int_distribution {
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __a = 0, result_type __b = numeric_limits<result_type>::max())
         : __a_(__a), __b_(__b) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
-    _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
 
     _LIBCPP_HIDE_FROM_ABI friend bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__a_ == __y.__a_ && __x.__b_ == __y.__b_;
@@ -179,21 +179,21 @@ class uniform_int_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return b(); }
 
   _LIBCPP_HIDE_FROM_ABI friend bool
   operator==(const uniform_int_distribution& __x, const uniform_int_distribution& __y) {
diff --git a/libcxx/include/__random/uniform_real_distribution.h b/libcxx/include/__random/uniform_real_distribution.h
index 9407827b2a5d5..f648bc0b8e076 100644
--- a/libcxx/include/__random/uniform_real_distribution.h
+++ b/libcxx/include/__random/uniform_real_distribution.h
@@ -42,8 +42,8 @@ class uniform_real_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __a = 0, result_type __b = 1) : __a_(__a), __b_(__b) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
-    _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__a_ == __y.__a_ && __x.__b_ == __y.__b_;
@@ -69,21 +69,21 @@ class uniform_real_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p);
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return b(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool
   operator==(const uniform_real_distribution& __x, const uniform_real_distribution& __y) {
diff --git a/libcxx/include/__random/weibull_distribution.h b/libcxx/include/__random/weibull_distribution.h
index 1d65b09ca663f..333699cac1be4 100644
--- a/libcxx/include/__random/weibull_distribution.h
+++ b/libcxx/include/__random/weibull_distribution.h
@@ -43,8 +43,8 @@ class weibull_distribution {
 
     _LIBCPP_HIDE_FROM_ABI explicit param_type(result_type __a = 1, result_type __b = 1) : __a_(__a), __b_(__b) {}
 
-    _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
-    _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __a_; }
+    [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __b_; }
 
     friend _LIBCPP_HIDE_FROM_ABI bool operator==(const param_type& __x, const param_type& __y) {
       return __x.__a_ == __y.__a_ && __x.__b_ == __y.__b_;
@@ -70,23 +70,23 @@ class weibull_distribution {
 
   // generating functions
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g) {
     return (*this)(__g, __p_);
   }
   template <class _URNG>
-  _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type operator()(_URNG& __g, const param_type& __p) {
     return __p.b() * std::pow(exponential_distribution<result_type>()(__g), 1 / __p.a());
   }
 
   // property functions
-  _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
-  _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type a() const { return __p_.a(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type b() const { return __p_.b(); }
 
-  _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI param_type param() const { return __p_; }
   _LIBCPP_HIDE_FROM_ABI void param(const param_type& __p) { __p_ = __p; }
 
-  _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
-  _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type min() const { return 0; }
+  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI result_type max() const { return numeric_limits<result_type>::infinity(); }
 
   friend _LIBCPP_HIDE_FROM_ABI bool operator==(const weibull_distribution& __x, const weibull_distribution& __y) {
     return __x.__p_ == __y.__p_;
diff --git a/libcxx/test/libcxx/numerics/rand/nodiscard.verify.cpp b/libcxx/test/libcxx/numerics/rand/nodiscard.verify.cpp
new file mode 100644
index 0000000000000..f9d7bb8f1b9a9
--- /dev/null
+++ b/libcxx/test/libcxx/numerics/rand/nodiscard.verify.cpp
@@ -0,0 +1,605 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// <random>
+
+// Check that functions are marked [[nodiscard]]
+
+#include <random>
+
+#include "test_macros.h"
+
+void test() {
+  std::mt19937_64 gen;
+
+  {
+    std::bernoulli_distribution::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.p();
+
+    std::bernoulli_distribution d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.p();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::binomial_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.t();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.p();
+
+    std::binomial_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.p();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::cauchy_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.b();
+
+    std::cauchy_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.b();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::chi_squared_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.n();
+
+    std::chi_squared_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.n();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::discard_block_engine<std::mt19937_64, 10, 5> e;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.base();
+  }
+  {
+    std::discrete_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.probabilities();
+
+    std::discrete_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.probabilities();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::exponential_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.lambda();
+
+    std::exponential_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.lambda();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::extreme_value_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.b();
+
+    std::extreme_value_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.b();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::fisher_f_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.m();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.n();
+
+    std::fisher_f_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.m();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.n();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::gamma_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.alpha();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.beta();
+
+    std::gamma_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.alpha();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.beta();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    std::generate_canonical<double, 10>(gen);
+  }
+  {
+    std::geometric_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.p();
+
+    std::geometric_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.p();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::independent_bits_engine<std::mt19937_64, 10, unsigned int> e;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.base();
+  }
+  {
+    std::linear_congruential_engine<unsigned int, 48271, 0, 2147483647> e(94);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+  }
+  {
+    std::lognormal_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.m();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.s();
+
+    std::lognormal_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.m();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.s();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::mt19937_64 e;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+  }
+  {
+    std::negative_binomial_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.k();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.p();
+
+    std::negative_binomial_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.k();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.p();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::normal_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.mean();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.stddev();
+
+    std::normal_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.mean();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.stddev();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::piecewise_constant_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.intervals();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.densities();
+
+    std::piecewise_constant_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.intervals();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.densities();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::piecewise_linear_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.intervals();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.densities();
+
+    std::piecewise_linear_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.intervals();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.densities();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::poisson_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.mean();
+
+    std::poisson_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.mean();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::random_device d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.entropy();
+  }
+  {
+    std::seed_seq s;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    s.size();
+  }
+  {
+    std::shuffle_order_engine<std::mt19937_64, 10> e;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.base();
+  }
+  {
+    std::student_t_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.n();
+
+    std::student_t_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.n();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::subtract_with_carry_engine<unsigned int, 24, 10, 24> e;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e();
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    e.max();
+  }
+  {
+    std::uniform_int_distribution<int>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.b();
+
+    std::uniform_int_distribution<int> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.b();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::uniform_real_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.b();
+
+    std::uniform_real_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.b();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+  {
+    std::weibull_distribution<double>::param_type p;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    p.b();
+
+    std::weibull_distribution<double> d;
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen);
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d(gen, p);
+
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.a();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.b();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.param();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.min();
+    // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+    d.max();
+  }
+}
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bernoulli/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bernoulli/bad_engine.verify.cpp
index 9855d8ae6f866..118f9aae74e08 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bernoulli/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bernoulli/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::bernoulli_distribution dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/bad_engine.verify.cpp
index 1b1bb4428f80d..3ff9292180ad7 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::binomial_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/bad_engine.verify.cpp
index d9b692ec94727..b8118932abf72 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/bad_engine.verify.cpp
@@ -26,6 +26,6 @@ void test(std::geometric_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 7 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 7 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/bad_engine.verify.cpp
index e526168d6d4ec..d4e7729d07beb 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/bad_engine.verify.cpp
@@ -26,6 +26,6 @@ void test(std::negative_binomial_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 7 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 7 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.cauchy/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.cauchy/bad_engine.verify.cpp
index 59e5b50a862dc..e5d135fcc5a63 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.cauchy/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.cauchy/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::cauchy_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.chisq/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.chisq/bad_engine.verify.cpp
index b0265148debf8..5c804043ab309 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.chisq/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.chisq/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::chi_squared_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 3 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 3 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.f/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.f/bad_engine.verify.cpp
index 77c97fb3351ad..61f7610f472d7 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.f/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.f/bad_engine.verify.cpp
@@ -26,6 +26,6 @@ void test(std::fisher_f_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 4 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 4 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.lognormal/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.lognormal/bad_engine.verify.cpp
index 80c34580bc40d..5ecc20c4e6bd4 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.lognormal/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.lognormal/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::lognormal_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.normal/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.normal/bad_engine.verify.cpp
index cc697ab5e7ae2..bcfa9e818965f 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.normal/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.normal/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::normal_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.t/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.t/bad_engine.verify.cpp
index 151a2bd954c8b..8a4a6b7a6cab4 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.t/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.norm/rand.dist.norm.t/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::student_t_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 5 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 5 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.exp/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.exp/bad_engine.verify.cpp
index b1241214de76f..b177b76905bc0 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.exp/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.exp/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::exponential_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.extreme/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.extreme/bad_engine.verify.cpp
index c002716a5316a..d083a2e010c9b 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.extreme/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.extreme/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::extreme_value_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.gamma/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.gamma/bad_engine.verify.cpp
index 8bf87dd8615c6..be1fad1e07677 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.gamma/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.gamma/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::gamma_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 3 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 3 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/bad_engine.verify.cpp
index ef56d9635fc49..c4a55f033263a 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/bad_engine.verify.cpp
@@ -26,6 +26,6 @@ void test(std::poisson_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 4 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 4 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.weibull/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.weibull/bad_engine.verify.cpp
index e40c1972abeb4..156af700cb349 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.weibull/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.weibull/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::weibull_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/bad_engine.verify.cpp
index a4def062f83f1..36ed7cd770bac 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::discrete_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/bad_engine.verify.cpp
index 002071129d03e..309d71a61f918 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::piecewise_constant_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/bad_engine.verify.cpp
index 0fb54a403ac9e..736acb2b3707d 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::piecewise_linear_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* 2 {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/bad_engine.verify.cpp
index 2432843942e29..3b5cf901cef27 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/bad_engine.verify.cpp
@@ -26,6 +26,6 @@ void test(std::uniform_int_distribution<int> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }
diff --git a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.real/bad_engine.verify.cpp b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.real/bad_engine.verify.cpp
index fa5c3a3ebb484..66b51a724899d 100644
--- a/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.real/bad_engine.verify.cpp
+++ b/libcxx/test/libcxx/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.real/bad_engine.verify.cpp
@@ -25,6 +25,6 @@ void test(std::uniform_real_distribution<double> dist)
   G<int> badg;
   G<unsigned> okg;
 
-  dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
-  dist(okg);
+  (void)dist(badg); //expected-error@*:* {{static assertion failed}} //expected-note {{in instantiation}}
+  (void)dist(okg);
 }



More information about the libcxx-commits mailing list