From: Jakub Jelinek Date: Wed, 25 Sep 2024 14:07:50 +0000 (+0200) Subject: c++: Add testcase for DR 2836 X-Git-Tag: basepoints/gcc-16~5685 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0564d9501ebf11c9f0c541ac79054a38ec791d8c;p=thirdparty%2Fgcc.git c++: Add testcase for DR 2836 Seems we already handle it the way the DR clarifies, if double/long double and std::float64_t have the same mode, foo has long double type (while x + y would be _Float64 in C23), so this patch just adds a testcase which verifies that. 2024-09-25 Jakub Jelinek * g++.dg/DRs/dr2836.C: New test. --- diff --git a/gcc/testsuite/g++.dg/DRs/dr2836.C b/gcc/testsuite/g++.dg/DRs/dr2836.C new file mode 100644 index 00000000000..88e35a7f305 --- /dev/null +++ b/gcc/testsuite/g++.dg/DRs/dr2836.C @@ -0,0 +1,30 @@ +// DR 2836 - Conversion rank of long double and extended floating-point types +// { dg-do compile { target c++23 } } +// { dg-additional-options "-mlong-double-64" { target powerpc*-*-* s390*-*-* } } + +#include + +#if defined (__STDCPP_FLOAT64_T__) \ + && __LDBL_MAX_EXP__ == __FLT64_MAX_EXP__ \ + && __LDBL_MANT_DIG__ == __FLT64_MANT_DIG__ \ + && __DBL_MAX_EXP__ == __FLT64_MAX_EXP__ \ + && __DBL_MANT_DIG__ == __FLT64_MANT_DIG__ +auto +foo (long double x, std::float64_t y) +{ + return x + y; +} + +template struct integral_constant { + static constexpr T value = v; +}; +typedef integral_constant false_type; +typedef integral_constant true_type; +template +struct is_same : false_type {}; +template +struct is_same : true_type {}; + +static_assert (is_same ::value); + +#endif