This page tracks the progress of adding C23 support to FreeBSD. The final draft of the standard can be found in N3220.
Contact person: RobertClausecker (fuz)
Work items
This list may be incomplete.
libc
Item |
Status |
Patches |
Owner |
Description |
printf("%b"), scanf("%b") |
landed |
des |
binary format for integers |
|
printf("%wNd"), scanf("%wNd") |
landed |
des |
fixed-width integer/float support |
|
memset_explicit() |
landed |
fuz |
like explicit_bzero() but for memset |
|
memccpy(), strdup(), strndup() |
landed |
shurd |
POSIX functions added to C23, visibility changes in <string.h> only |
|
gmtime_r(), localtime_r() |
landed |
shurd |
POSIX functions added to C23, visibility changes in <time.h> only |
|
timegm() |
landed |
fuz |
BSD function added to C23, visibility change in <time.h> only |
|
memalignment() |
landed |
fuz |
finds the alignment of an object |
|
*_WIDTH |
landed |
fuz |
preprocessor macros to get the width of integer types |
|
stdbit.h |
landed |
fuz |
bit manipulation functions |
|
QChar/QVoid prototypes in string.h |
open |
|
|
string functions carry over their argument's const-ness to the return value |
nullptr, nullptr_t |
hold |
|
|
type for null pointers in <stddef.h> (needs LLVM 20 it seems) |
unreachable() |
hold |
fuz |
unreachable statement hint (needs rework) |
|
char8_t, atomic_char8_t |
landed |
fuz |
alias for unsigned char in <uchar.h>, <stdatomic.h> |
|
mbrtoc8(), c8rtomb() |
open |
|
|
restartable UTF-8 conversion functions |
free_sized(), free_aligned_sized() |
open |
|
|
variants of free() with explicit size/alignment parameters |
libm
This is in scope of the Numerics project.
Item |
Status |
Patches |
Owner |
Description |
tgmath.h additions |
open |
|
|
type-generic variants of all the new libm functions |
sinpif(), sinpi(), sinpil() |
landed |
kargl |
sinpi(x) = sin(πx) |
|
cospif(), cospi(), cospil() |
landed |
kargl |
cospi(x) = cos(πx) |
|
tanpif(), tanpi(), tanpil() |
landed |
kargl |
tanpi(x) = tan(πx) |
|
acospi(), acospif(), acospil() |
open |
|
|
acospi(x) = acos(x)/π |
asinpi(), asinpif(), asinpil() |
open |
|
|
asinpi(x) = asin(x)/π |
atanpi(), atanpif(), atanpil() |
open |
|
|
atanpi(x) = atan(x)/π |
atanpi(), atanpif(), atanpil() |
open |
|
|
atan2pi(x,y) = atan2(x,y)/π |
canonicalize(), canonicalizef(), canonicalizel() |
open |
|
|
compute canonical representation of FP value |
compoundn(), compoundnf(), compoundnl() |
open |
|
|
compound(x) = (1 + x)n |
fadd(), faddl(), daddl() |
open |
|
|
add and round to narrower type |
fdiv(), fdivl(), ddivl() |
open |
|
|
divide and round to narrower type |
ffma(), ffmal(), dfmal() |
open |
|
|
fused multiply-add and round to narrower type |
fmul(), fmull(), dmull() |
open |
|
|
multiply and round to narrower type |
fsqrt(), fsqrtl(), dsqrtl() |
open |
|
|
square-root and round to narrower type |
fsub(), fsubl(), dsubl() |
open |
|
|
subtract and round to narrower type |
exp10(), exp10f(), exp10l() |
open |
|
|
exp10(x) = 10x |
exp10m1(), exp10m1f(), exp10m1l() |
open |
|
|
exp10m1(x) = 10x − 1 |
exp2m1(), exp2m1f(), exp2m1l() |
open |
|
|
exp2m1(x) = 2x − 1 |
fmaximum(), fmaximumf(), fmaximuml() |
open |
|
|
maximum where -0.0 < +0.0 |
fminimum(), fminimumf(), fminimuml() |
open |
|
|
minimum where -0.0 < +0.0 |
fmaximum_mag(), fmaximum_magf(), fmaximum_magl() |
open |
|
|
return number with higher magnitude, else return fmaximum() |
fminimum_mag(), fminimum_magf(), fminimum_magl() |
open |
|
|
return number with lower magnitude, else return fminimum() |
fmaximum_num(), fmaximum_numf(), fmaximum_numl() |
open |
|
|
like fmaximum(), but picks the number when one argument is NaN |
fminimum_num(), fminimum_numf(), fminimum_numl() |
open |
|
|
like fminimum(), but picks the number when one argument is NaN |
fmaximum_mag_num(), fmaximum_mag_numf(), fmaximum_mag_numl() |
open |
|
|
like fmaximum_mag(), but picks the number when one argument is NaN |
fminimum_mag_num(), fminimum_mag_numf(), fminimum_mag_numl() |
open |
|
|
like fminimum_mag(), but picks the number when one argument is NaN |
fromfp(), fromfpf(), fromfpl() |
open |
|
|
round to signed integer of given width with given rounding mode |
ufromfp(), ufromfpf(), ufromfpl() |
open |
|
|
round to unsigned integer of given width with given rounding mode |
fromfpx(), fromfpxf(), fromfpx() |
open |
|
|
round to signed integer of given width with given rounding mode with inexact exception |
ufromfpx(), ufromfpxf(), ufromfpxl() |
open |
|
|
round to unsigned integer of given width with given rounding mode with inexact exception |
iscanonical() |
open |
|
|
check if FP number is canonical |
iseqsig() |
open |
|
|
check for equal sign |
issignaling() |
open |
|
|
check for signalling NaN |
issubnormal() |
open |
|
|
check for subnormal number |
iszero() |
open |
|
|
check for zero |
nextdown(), nextdownf(), nextdownl() |
open |
|
|
return next lowest FP number |
nextup(), nextupf(), nextdownf() |
open |
|
|
return next highest FP number |
pown(), pownf(), pownl() |
open |
|
|
pown(x, n) = xn (integral powers) |
powr(), powrf(), powrl() |
open |
|
|
powr(y, x) = ey ln x (pow with limited range) |
rootn(), rootnf(), rootnl() |
open |
|
|
rootn(x, n) = x1/n (principal roots) |
rsqrt(), rsqrtf(), rsqrtl() |
open |
|
|
rsqrt(x) = 1/sqrt(x) |
roundeven(), roundevenf(), roundevenl() |
open |
|
|
nearest integer with round-to-even semantics |
This list does not include decimal floating point functions.