https://github.com/lknknm updated https://github.com/llvm/llvm-project/pull/225167
>From 888c5180303853f772d911248891a7e43c033051 Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Sat, 19 Sep 2026 18:27:51 +0200 Subject: [PATCH 1/7] copysign to ExprConstant --- clang/include/clang/Basic/Builtins.td | 1 - clang/lib/AST/ExprConstant.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 90340ad7f812c..31f235c490e9a 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -4056,7 +4056,6 @@ def Copysign : FPMathTemplate, LibBuiltin<"math.h"> { let Attributes = [NoThrow, Const]; let Prototype = "T(T, T)"; let AddBuiltinPrefixedAlias = 1; - let OnlyBuiltinPrefixedAliasIsConstexpr = 1; } def Fabs : FPMathTemplate, LibBuiltin<"math.h"> { diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 9242491832841..fd61fb8d6a976 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -20605,6 +20605,7 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) { // FIXME: Builtin::BI__builtin_powif // FIXME: Builtin::BI__builtin_powil + case Builtin::BIcopysign: case Builtin::BI__builtin_copysign: case Builtin::BI__builtin_copysignf: case Builtin::BI__builtin_copysignl: >From 4374300e1c5812cfa945975790f241c5eb138105 Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Sun, 20 Sep 2026 23:18:48 +0200 Subject: [PATCH 2/7] add: simple test case to understand if it is working --- clang/test/Sema/constant-builtins-2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang/test/Sema/constant-builtins-2.c b/clang/test/Sema/constant-builtins-2.c index fd3643bbdb7c8..c40a31c214fed 100644 --- a/clang/test/Sema/constant-builtins-2.c +++ b/clang/test/Sema/constant-builtins-2.c @@ -251,6 +251,10 @@ __extension__ _Static_assert( 1, "" ); +__extension__ _Static_assert( + __builtin_copysign(1.0, 1.0) == 1.0 +, ""); + //double g19 = __builtin_powi(2.0, 4); //float g20 = __builtin_powif(2.0f, 4); //long double g21 = __builtin_powil(2.0L, 4); >From c630680dc54c84fef8ac1a7ebf0a1942ae4aadda Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Mon, 21 Sep 2026 19:57:24 +0200 Subject: [PATCH 3/7] Add: Constexpr to copysign --- clang/include/clang/Basic/Builtins.td | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 31f235c490e9a..87c28981e9a35 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -244,7 +244,7 @@ def Atan2F16F128 : Builtin, F16F128MathTemplate { def CopysignF16 : Builtin { let Spellings = ["__builtin_copysignf16"]; - let Attributes = [FunctionWithBuiltinPrefix, NoThrow, Const]; + let Attributes = [FunctionWithBuiltinPrefix, NoThrow, Const, Constexpr]; let Prototype = "__fp16(__fp16, __fp16)"; } @@ -4053,7 +4053,7 @@ def Atan2 : FPMathTemplate, LibBuiltin<"math.h"> { def Copysign : FPMathTemplate, LibBuiltin<"math.h"> { let Spellings = ["copysign"]; - let Attributes = [NoThrow, Const]; + let Attributes = [NoThrow, Const, Constexpr]; let Prototype = "T(T, T)"; let AddBuiltinPrefixedAlias = 1; } >From f8f973bf78c3684c8e1e8b6a662cbec90ff843c5 Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Mon, 21 Sep 2026 20:20:10 +0200 Subject: [PATCH 4/7] add: copysign double tests --- clang/test/Sema/constant-builtins-2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/clang/test/Sema/constant-builtins-2.c b/clang/test/Sema/constant-builtins-2.c index c40a31c214fed..5a790b6d10584 100644 --- a/clang/test/Sema/constant-builtins-2.c +++ b/clang/test/Sema/constant-builtins-2.c @@ -252,7 +252,15 @@ __extension__ _Static_assert( ); __extension__ _Static_assert( - __builtin_copysign(1.0, 1.0) == 1.0 + // double + __builtin_copysign(1.0, 1.0) == 1.0 && __builtin_copysign(1.0, -1.0) == -1.0 && \ + __builtin_copysign(-1.0, 1.0) == 1.0 && __builtin_copysign(-1.0, -1.0) == -1.0 && \ + !__builtin_signbit(__builtin_copysign(0.0, 1.0)) && __builtin_signbit(__builtin_copysign(0.0, -1.0)) && \ + !__builtin_signbit(__builtin_copysign(-0.0, 1.0)) && __builtin_signbit(__builtin_copysign(-0.0, -1.0)) && \ + __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 && \ + + // floating-point + // long double , ""); //double g19 = __builtin_powi(2.0, 4); >From f86844ac3f51652bfc1aeddd7b3c6220e02d1dfd Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Mon, 21 Sep 2026 20:28:35 +0200 Subject: [PATCH 5/7] add: all copysign tests --- clang/test/Sema/constant-builtins-2.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/clang/test/Sema/constant-builtins-2.c b/clang/test/Sema/constant-builtins-2.c index 5a790b6d10584..498a7af94490b 100644 --- a/clang/test/Sema/constant-builtins-2.c +++ b/clang/test/Sema/constant-builtins-2.c @@ -257,11 +257,32 @@ __extension__ _Static_assert( __builtin_copysign(-1.0, 1.0) == 1.0 && __builtin_copysign(-1.0, -1.0) == -1.0 && \ !__builtin_signbit(__builtin_copysign(0.0, 1.0)) && __builtin_signbit(__builtin_copysign(0.0, -1.0)) && \ !__builtin_signbit(__builtin_copysign(-0.0, 1.0)) && __builtin_signbit(__builtin_copysign(-0.0, -1.0)) && \ - __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 && \ + __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 && \ // floating-point + __builtin_copysignf(1.0f, 1.0f) == 1.0f && __builtin_copysignf(1.0f, -1.0f) == -1.0f && \ + __builtin_copysignf(-1.0f, 1.0f) == 1.0f && __builtin_copysignf(-1.0f, -1.0f) == -1.0f && \ + !__builtin_signbit(__builtin_copysignf(0.0f, 1.0f)) && __builtin_signbit(__builtin_copysignf(0.0f, -1.0f)) && \ + !__builtin_signbit(__builtin_copysignf(-0.0f, 1.0f)) && __builtin_signbit(__builtin_copysignf(-0.0f, -1.0f)) && \ + __builtin_copysignf(1.0f, 0.0f) == 1.0f && __builtin_copysignf(1.0f, -0.0f) == -1.0f && \ + // long double -, ""); + __builtin_copysignl(1.0L, 1.0L) == 1.0L && __builtin_copysignl(1.0L, -1.0L) == -1.0L && \ + __builtin_copysignl(-1.0L, 1.0L) == 1.0L && __builtin_copysignl(-1.0L, -1.0L) == -1.0L && \ + !__builtin_signbitl(__builtin_copysignl(0.0L, 1.0L)) && __builtin_signbitl(__builtin_copysignl(0.0L, -1.0L)) && \ + !__builtin_signbitl(__builtin_copysignl(-0.0L, 1.0L)) && __builtin_signbitl(__builtin_copysignl(-0.0L, -1.0L)) && \ + __builtin_copysignl(1.0L, 0.0L) == 1.0L && __builtin_copysignl(1.0L, -0.0L) == -1.0L && \ + +#if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__) + // __float128 + __builtin_copysignf128(1.0q, 1.0q) == 1.0q && __builtin_copysignf128(1.0q, -1.0q) == -1.0q && \ + __builtin_copysignf128(-1.0q, 1.0q) == 1.0q && __builtin_copysignf128(-1.0q, -1.0q) == -1.0q && \ + !__builtin_signbit(__builtin_copysignf128(0.0q, 1.0q)) && __builtin_signbit(__builtin_copysignf128(0.0q, -1.0q)) && \ + !__builtin_signbit(__builtin_copysignf128(-0.0q, 1.0q)) && __builtin_signbit(__builtin_copysignf128(-0.0q, -1.0q)) && \ + __builtin_copysignf128(1.0q, 0.0q) == 1.0q && __builtin_copysignf128(1.0q, -0.0q) == -1.0q && +#endif + 1, "" +); //double g19 = __builtin_powi(2.0, 4); //float g20 = __builtin_powif(2.0f, 4); >From d7d04e99651578bc400e3e2c990b4ceabea4de77 Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Tue, 22 Sep 2026 09:35:25 +0200 Subject: [PATCH 6/7] add: BIcopysign to InterpBuiltin.cpp --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 843850af334a2..d52e9f397b7d1 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -4666,6 +4666,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case Builtin::BI__builtin_inff128: return interp__builtin_inf(S, OpPC, Frame, Call); + case Builtin::BIcopysign: case Builtin::BI__builtin_copysign: case Builtin::BI__builtin_copysignf: case Builtin::BI__builtin_copysignl: >From 8dbc23c2a7342a33e7c4fa0184a61872fd176afb Mon Sep 17 00:00:00 2001 From: Lucas Mellone <[email protected]> Date: Tue, 22 Sep 2026 10:41:36 +0200 Subject: [PATCH 7/7] add BIcopysignf and BIcopysignl --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 2 ++ clang/lib/AST/ExprConstant.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index d52e9f397b7d1..fc67359a5e5ac 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -4667,6 +4667,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, return interp__builtin_inf(S, OpPC, Frame, Call); case Builtin::BIcopysign: + case Builtin::BIcopysignf: + case Builtin::BIcopysignl: case Builtin::BI__builtin_copysign: case Builtin::BI__builtin_copysignf: case Builtin::BI__builtin_copysignl: diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index fd61fb8d6a976..f5ccbdc0f5b04 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -20606,6 +20606,8 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) { // FIXME: Builtin::BI__builtin_powil case Builtin::BIcopysign: + case Builtin::BIcopysignf: + case Builtin::BIcopysignl: case Builtin::BI__builtin_copysign: case Builtin::BI__builtin_copysignf: case Builtin::BI__builtin_copysignl: _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
