[libcxx-commits] [libcxx] d1e066d - [libc++] Make some tests in `math_nodiscard_extensions` Clang-only.

Konstantin Varlamov via libcxx-commits libcxx-commits at lists.llvm.org
Thu Feb 2 23:30:30 PST 2023


Author: varconst
Date: 2023-02-02T23:29:26-08:00
New Revision: d1e066dd8bf0e7653395498dc71662d635f1cb11

URL: https://github.com/llvm/llvm-project/commit/d1e066dd8bf0e7653395498dc71662d635f1cb11
DIFF: https://github.com/llvm/llvm-project/commit/d1e066dd8bf0e7653395498dc71662d635f1cb11.diff

LOG: [libc++] Make some tests in `math_nodiscard_extensions` Clang-only.

Clang implicitly adds the `[[gnu::const]]` attribute to many math
functions from the C standard library functions. Since this behavior is
Clang-specific, make sure the test only runs on Clang.

Differential Revision: https://reviews.llvm.org/D143033

Added: 
    

Modified: 
    libcxx/test/libcxx/diagnostics/math_nodiscard_extensions.verify.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/libcxx/diagnostics/math_nodiscard_extensions.verify.cpp b/libcxx/test/libcxx/diagnostics/math_nodiscard_extensions.verify.cpp
index a3db61baf5d0f..dabeda7aa0a67 100644
--- a/libcxx/test/libcxx/diagnostics/math_nodiscard_extensions.verify.cpp
+++ b/libcxx/test/libcxx/diagnostics/math_nodiscard_extensions.verify.cpp
@@ -11,146 +11,155 @@
 // We don't control the implementation of the math.h functions on windows
 // UNSUPPORTED: windows
 
-// check that const cmath functions are declared [[nodiscard]]
+// Check that functions from `<cmath>` that Clang marks with the `[[gnu::const]]` attribute are declared
+// `[[nodiscard]]`.
 
 #include <cmath>
+#include "test_macros.h"
 
 void test() {
-  std::signbit(0.f);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::signbit(0.);              // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::signbit(0.l);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::signbit(0);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::signbit(0U);              // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::fpclassify(0.f);          // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fpclassify(0.);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fpclassify(0.l);          // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fpclassify(0);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fpclassify(0U);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isfinite(0.f);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isfinite(0.);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isfinite(0.l);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isfinite(0);              // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isfinite(0U);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isinf(0.f);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isinf(0.);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isinf(0.l);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isinf(0);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isinf(0U);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isnan(0.f);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnan(0.);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnan(0.l);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnan(0);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnan(0U);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isnormal(0.f);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnormal(0.);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnormal(0.l);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnormal(0);              // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isnormal(0U);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isgreater(0.f, 0.f);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreater(0., 0.);        // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreater(0.l, 0.l);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreater(0, 0);          // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreater(0U, 0U);        // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isgreaterequal(0.f, 0.f); // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreaterequal(0., 0.);   // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreaterequal(0.l, 0.l); // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreaterequal(0, 0);     // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isgreaterequal(0U, 0U);   // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isless(0.f, 0.f);         // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isless(0., 0.);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isless(0.l, 0.l);         // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isless(0, 0);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isless(0U, 0U);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::islessequal(0.f, 0.f);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessequal(0., 0.);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessequal(0.l, 0.l);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessequal(0, 0);        // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessequal(0U, 0U);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::islessgreater(0.f, 0.f);  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessgreater(0., 0.);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessgreater(0.l, 0.l);  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessgreater(0, 0);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::islessgreater(0U, 0U);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::isunordered(0.f, 0.f);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isunordered(0., 0.);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isunordered(0.l, 0.l);    // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isunordered(0, 0);        // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::isunordered(0U, 0U);      // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::ceil(0.f);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
+  // These tests rely on Clang's behaviour of adding `[[gnu::const]]` to the double overload of most of the functions
+  // below.
+  // Without that attribute being added implicitly, this test can't be checked consistently because its result depends
+  // on whether we're getting libc++'s own `std::foo(double)` or the underlying C library's `foo(double)`.
+#ifdef TEST_COMPILER_CLANG
   std::ceil(0.);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::ceil(0.l);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::ceil(0);                  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::ceil(0U);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::fabs(0.f);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::fabs(0.);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fabs(0.l);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fabs(0);                  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fabs(0U);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::floor(0.f);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::floor(0.);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::floor(0.l);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::floor(0);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::floor(0U);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::cbrt(0.f);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::cbrt(0.);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::cbrt(0.l);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::cbrt(0);                  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::cbrt(0U);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::copysign(0.f, 0.f);       // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::copysign(0., 0.);         // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::copysign(0.l, 0.l);       // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::copysign(0, 0);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::copysign(0U, 0U);         // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::fmax(0.f, 0.f);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::fmax(0., 0.);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmax(0.l, 0.l);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmax(0, 0);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmax(0U, 0U);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::fmin(0.f, 0.f);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::fmin(0., 0.);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmin(0.l, 0.l);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmin(0, 0);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::fmin(0U, 0U);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::nearbyint(0.f);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::nearbyint(0.);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::nearbyint(0.l);           // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::nearbyint(0);             // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::nearbyint(0U);            // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::rint(0.f);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::rint(0.);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::rint(0.l);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::rint(0);                  // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::rint(0U);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::round(0.f);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::round(0.);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::round(0.l);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::round(0);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::round(0U);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-
-  std::trunc(0.f);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
   std::trunc(0.);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::trunc(0.l);               // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::trunc(0);                 // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
-  std::trunc(0U);                // expected-warning-re {{ignoring return value of function declared with {{.*}} attribute}}
+#endif
+
+  std::signbit(0.f);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::signbit(0.);              // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::signbit(0.l);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::signbit(0);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::signbit(0U);              // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::fpclassify(0.f);          // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fpclassify(0.);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fpclassify(0.l);          // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fpclassify(0);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fpclassify(0U);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isfinite(0.f);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isfinite(0.);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isfinite(0.l);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isfinite(0);              // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isfinite(0U);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isinf(0.f);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isinf(0.);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isinf(0.l);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isinf(0);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isinf(0U);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isnan(0.f);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnan(0.);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnan(0.l);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnan(0);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnan(0U);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isnormal(0.f);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnormal(0.);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnormal(0.l);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnormal(0);              // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isnormal(0U);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isgreater(0.f, 0.f);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreater(0., 0.);        // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreater(0.l, 0.l);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreater(0, 0);          // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreater(0U, 0U);        // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isgreaterequal(0.f, 0.f); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreaterequal(0., 0.);   // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreaterequal(0.l, 0.l); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreaterequal(0, 0);     // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isgreaterequal(0U, 0U);   // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isless(0.f, 0.f);         // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isless(0., 0.);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isless(0.l, 0.l);         // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isless(0, 0);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isless(0U, 0U);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::islessequal(0.f, 0.f);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessequal(0., 0.);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessequal(0.l, 0.l);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessequal(0, 0);        // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessequal(0U, 0U);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::islessgreater(0.f, 0.f);  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessgreater(0., 0.);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessgreater(0.l, 0.l);  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessgreater(0, 0);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::islessgreater(0U, 0U);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::isunordered(0.f, 0.f);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isunordered(0., 0.);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isunordered(0.l, 0.l);    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isunordered(0, 0);        // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::isunordered(0U, 0U);      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::ceil(0.f);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::ceil(0.l);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::ceil(0);                  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::ceil(0U);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::fabs(0.f);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fabs(0.l);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fabs(0);                  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fabs(0U);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::floor(0.f);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::floor(0.l);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::floor(0);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::floor(0U);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::cbrt(0.f);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::cbrt(0.l);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::cbrt(0);                  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::cbrt(0U);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::copysign(0.f, 0.f);       // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::copysign(0.l, 0.l);       // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::copysign(0, 0);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::copysign(0U, 0U);         // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::fmax(0.f, 0.f);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmax(0.l, 0.l);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmax(0, 0);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmax(0U, 0U);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::fmin(0.f, 0.f);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmin(0.l, 0.l);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmin(0, 0);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::fmin(0U, 0U);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::nearbyint(0.f);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::nearbyint(0.l);           // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::nearbyint(0);             // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::nearbyint(0U);            // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::rint(0.f);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::rint(0.l);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::rint(0);                  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::rint(0U);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::round(0.f);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::round(0.l);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::round(0);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::round(0U);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+
+  std::trunc(0.f);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::trunc(0.l);               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::trunc(0);                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::trunc(0U);                // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
 }


        


More information about the libcxx-commits mailing list