xref: /llvm-project/libcxx/test/libcxx/diagnostics/new.nodiscard.verify.cpp (revision ba87515fea90b5d55836a8e3be63a7e683ce299d)
183bc7b57SNikolas Klauser //===----------------------------------------------------------------------===//
283bc7b57SNikolas Klauser //
383bc7b57SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
483bc7b57SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
583bc7b57SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
683bc7b57SNikolas Klauser //
783bc7b57SNikolas Klauser //===----------------------------------------------------------------------===//
883bc7b57SNikolas Klauser 
983bc7b57SNikolas Klauser // UNSUPPORTED: c++03
1083bc7b57SNikolas Klauser 
1183bc7b57SNikolas Klauser // check that <array> functions are marked [[nodiscard]]
1283bc7b57SNikolas Klauser 
1383bc7b57SNikolas Klauser // clang-format off
1483bc7b57SNikolas Klauser 
1583bc7b57SNikolas Klauser #include <new>
1683bc7b57SNikolas Klauser 
1783bc7b57SNikolas Klauser #include "test_macros.h"
1883bc7b57SNikolas Klauser 
1983bc7b57SNikolas Klauser void test() {
2083bc7b57SNikolas Klauser   ::operator new(0);                                      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2183bc7b57SNikolas Klauser   ::operator new(0, std::nothrow);                        // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2283bc7b57SNikolas Klauser   ::operator new[](0);                                    // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2383bc7b57SNikolas Klauser   ::operator new[](0, std::nothrow);                      // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
24*ba87515fSNikolas Klauser #if _LIBCPP_HAS_ALIGNED_ALLOCATION
2583bc7b57SNikolas Klauser   ::operator new(0, std::align_val_t{1});                 // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2683bc7b57SNikolas Klauser   ::operator new(0, std::align_val_t{1}, std::nothrow);   // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2783bc7b57SNikolas Klauser   ::operator new[](0, std::align_val_t{1});               // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
2883bc7b57SNikolas Klauser   ::operator new[](0, std::align_val_t{1}, std::nothrow); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
29*ba87515fSNikolas Klauser #endif // _LIBCPP_HAS_ALIGNED_ALLOCATION
3083bc7b57SNikolas Klauser 
3183bc7b57SNikolas Klauser #if TEST_STD_VER >= 17
3283bc7b57SNikolas Klauser   int* ptr = nullptr;
3383bc7b57SNikolas Klauser   std::launder(ptr); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
3483bc7b57SNikolas Klauser #endif
3583bc7b57SNikolas Klauser }
36