brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 63e6f8f Raw
94 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710// UNSUPPORTED: no-localization11 12// TODO FMT This test should not require std::to_chars(floating-point)13// XFAIL: availability-fp_to_chars-missing14 15// Basic test to validate ill-formed code is properly detected.16 17// <format>18 19// template<class... Args>20//   string format(const locale& loc, format-string<Args...> fmt, const Args&... args);21// template<class... Args>22//   wstring format(const locale& loc, wformat-string<Args...> fmt, const Args&... args);23 24#include <format>25#include <locale>26 27#include "test_macros.h"28 29// clang-format off30 31void f() {32  TEST_IGNORE_NODISCARD std::format(std::locale(), "{"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}33  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}34 35  TEST_IGNORE_NODISCARD std::format(std::locale(), "}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}36  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}37 38  TEST_IGNORE_NODISCARD std::format(std::locale(), "{}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}39  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}40 41  TEST_IGNORE_NODISCARD std::format(std::locale(), "{0}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}42  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}43 44  TEST_IGNORE_NODISCARD std::format(std::locale(), "{:-}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}45  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}46 47  TEST_IGNORE_NODISCARD std::format(std::locale(), "{:#}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}48  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}49 50  TEST_IGNORE_NODISCARD std::format(std::locale(), "{:L}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}51  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}52 53  TEST_IGNORE_NODISCARD std::format(std::locale(), "{0:{0}}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}54  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}55 56  TEST_IGNORE_NODISCARD std::format(std::locale(), "{:.42d}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}57  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}58 59  TEST_IGNORE_NODISCARD std::format(std::locale(), "{:d}", "Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}60  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}61 62#ifndef TEST_HAS_NO_WIDE_CHARACTERS63  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}64  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}65 66  TEST_IGNORE_NODISCARD std::format(std::locale(), L"}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}67  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}68 69  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}70  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}71 72  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{0}"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}73  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}74 75  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{:-}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}76  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}77 78  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{:#}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}79  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}80 81  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{:L}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}82  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}83 84  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{0:{0}}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}85  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}86 87  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{:.42d}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}88  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}89 90  TEST_IGNORE_NODISCARD std::format(std::locale(), L"{:d}", L"Forty-two"); // expected-error-re{{call to consteval function '{{.*}}' is not a constant expression}}91  // expected-note@*:* {{non-constexpr function '__throw_format_error' cannot be used in a constant expression}}92#endif93}94