Skip to content

Commit f143443

Browse files
committed
Add ExprConstant support
1 parent 98e909e commit f143443

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15310,6 +15310,33 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1531015310
Result = RHS;
1531115311
return true;
1531215312
}
15313+
15314+
case Builtin::BI__builtin_fmaximum_num:
15315+
case Builtin::BI__builtin_fmaximum_numf:
15316+
case Builtin::BI__builtin_fmaximum_numl:
15317+
case Builtin::BI__builtin_fmaximum_numf16:
15318+
case Builtin::BI__builtin_fmaximum_numf128: {
15319+
APFloat RHS(0.);
15320+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15321+
!EvaluateFloat(E->getArg(1), RHS, Info))
15322+
return false;
15323+
Result = maximumnum(Result, RHS);
15324+
return true;
15325+
}
15326+
15327+
case Builtin::BI__builtin_fminimum_num:
15328+
case Builtin::BI__builtin_fminimum_numf:
15329+
case Builtin::BI__builtin_fminimum_numl:
15330+
case Builtin::BI__builtin_fminimum_numf16:
15331+
case Builtin::BI__builtin_fminimum_numf128: {
15332+
APFloat RHS(0.);
15333+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15334+
!EvaluateFloat(E->getArg(1), RHS, Info))
15335+
return false;
15336+
Result = minimumnum(Result, RHS);
15337+
return true;
15338+
}
15339+
1531315340
}
1531415341
}
1531515342

clang/test/Preprocessor/feature_tests.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858

5959
// Check __has_constexpr_builtin
6060
#if !__has_constexpr_builtin(__builtin_fmax) || \
61-
!__has_constexpr_builtin(__builtin_fmin)
61+
!__has_constexpr_builtin(__builtin_fmin) || \
62+
!__has_constexpr_builtin(__builtin_fmaximum_num) || \
63+
!__has_constexpr_builtin(__builtin_fmaximum_num)
6264
#error Clang should have these constexpr builtins
6365
#endif
6466

0 commit comments

Comments
 (0)