[libc++] Addresses LWG3782.

3782. Should <math.h> declare ::lerp?

Libc++ doesn't declare ::lerp, adds tests to validate the requirement.

Reviewed By: #libc, philnik

Differential Revision: https://reviews.llvm.org/D142817
This commit is contained in:
Mark de Wever
2023-01-21 13:38:44 +01:00
parent 27c3c6c4b0
commit 853059a150
2 changed files with 40 additions and 1 deletions

View File

@@ -227,7 +227,7 @@
"`3775 <https://wg21.link/LWG3775>`__","Broken dependencies in the ``Cpp17Allocator`` requirements", "November 2022","","",""
"`3778 <https://wg21.link/LWG3778>`__","``vector<bool>`` missing exception specifications", "November 2022","","",""
"`3781 <https://wg21.link/LWG3781>`__","The exposition-only alias templates ``cont-key-type`` and ``cont-mapped-type`` should be removed", "November 2022","|Nothing to do|","",""
"`3782 <https://wg21.link/LWG3782>`__","Should ``<math.h>`` declare ``::lerp``?", "November 2022","","",""
"`3782 <https://wg21.link/LWG3782>`__","Should ``<math.h>`` declare ``::lerp``?", "November 2022","|Complete|","17.0",""
"`3784 <https://wg21.link/LWG3784>`__","std.compat should not provide ``::byte`` and its friends", "November 2022","","",""
"`3785 <https://wg21.link/LWG3785>`__","``ranges::to`` is over-constrained on the destination type being a range", "November 2022","","","|ranges|"
"`3788 <https://wg21.link/LWG3788>`__","``jthread::operator=(jthread&&)`` postconditions are unimplementable under self-assignment", "November 2022","","",""
1 Issue # Issue Name Meeting Status First released version Labels
227 `3775 <https://wg21.link/LWG3775>`__ Broken dependencies in the ``Cpp17Allocator`` requirements November 2022
228 `3778 <https://wg21.link/LWG3778>`__ ``vector<bool>`` missing exception specifications November 2022
229 `3781 <https://wg21.link/LWG3781>`__ The exposition-only alias templates ``cont-key-type`` and ``cont-mapped-type`` should be removed November 2022 |Nothing to do|
230 `3782 <https://wg21.link/LWG3782>`__ Should ``<math.h>`` declare ``::lerp``? November 2022 |Complete| 17.0
231 `3784 <https://wg21.link/LWG3784>`__ std.compat should not provide ``::byte`` and its friends November 2022
232 `3785 <https://wg21.link/LWG3785>`__ ``ranges::to`` is over-constrained on the destination type being a range November 2022 |ranges|
233 `3788 <https://wg21.link/LWG3788>`__ ``jthread::operator=(jthread&&)`` postconditions are unimplementable under self-assignment November 2022

View File

@@ -0,0 +1,39 @@
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
// When built with modules, this test gives diagnostics like
// declaration of 'lerp' must be imported from module 'std.compat.cmath'
// before it is required
// therefore disable the test in this configuration.
// UNSUPPORTED: modules-build
// <math.h>
// [support.c.headers.other]/1
// ... except for the functions described in [sf.cmath], the
// std::lerp function overloads ([c.math.lerp]) ...
#include <math.h>
void f() {
{
float f;
::lerp(f, f, f); // expected-error {{no member named 'lerp' in the global namespace}}
std::lerp(f, f, f); // expected-error {{no member named 'lerp' in namespace 'std'}}
}
{
double d;
::lerp(d, d, d); // expected-error {{no member named 'lerp' in the global namespace}}
std::lerp(d, d, d); // expected-error {{no member named 'lerp' in namespace 'std'}}
}
{
long double l;
::lerp(l, l, l); // expected-error {{no member named 'lerp' in the global namespace}}
std::lerp(l, l, l); // expected-error {{no member named 'lerp' in namespace 'std'}}
}
}