Skip to content

Commit 8e43dd1

Browse files
committed
Add ExprConstant support
1 parent c08b0a8 commit 8e43dd1

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
@@ -15314,6 +15314,33 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1531415314
Result = RHS;
1531515315
return true;
1531615316
}
15317+
15318+
case Builtin::BI__builtin_fmaximum_num:
15319+
case Builtin::BI__builtin_fmaximum_numf:
15320+
case Builtin::BI__builtin_fmaximum_numl:
15321+
case Builtin::BI__builtin_fmaximum_numf16:
15322+
case Builtin::BI__builtin_fmaximum_numf128: {
15323+
APFloat RHS(0.);
15324+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15325+
!EvaluateFloat(E->getArg(1), RHS, Info))
15326+
return false;
15327+
Result = maximumnum(Result, RHS);
15328+
return true;
15329+
}
15330+
15331+
case Builtin::BI__builtin_fminimum_num:
15332+
case Builtin::BI__builtin_fminimum_numf:
15333+
case Builtin::BI__builtin_fminimum_numl:
15334+
case Builtin::BI__builtin_fminimum_numf16:
15335+
case Builtin::BI__builtin_fminimum_numf128: {
15336+
APFloat RHS(0.);
15337+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15338+
!EvaluateFloat(E->getArg(1), RHS, Info))
15339+
return false;
15340+
Result = minimumnum(Result, RHS);
15341+
return true;
15342+
}
15343+
1531715344
}
1531815345
}
1531915346

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)