Skip to content

Commit d364de3

Browse files
committed
Add ExprConstant support
1 parent 1f357ab commit d364de3

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
@@ -14851,6 +14851,33 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1485114851
Result = RHS;
1485214852
return true;
1485314853
}
14854+
14855+
case Builtin::BI__builtin_fmaximum_num:
14856+
case Builtin::BI__builtin_fmaximum_numf:
14857+
case Builtin::BI__builtin_fmaximum_numl:
14858+
case Builtin::BI__builtin_fmaximum_numf16:
14859+
case Builtin::BI__builtin_fmaximum_numf128: {
14860+
APFloat RHS(0.);
14861+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
14862+
!EvaluateFloat(E->getArg(1), RHS, Info))
14863+
return false;
14864+
Result = maximumnum(Result, RHS);
14865+
return true;
14866+
}
14867+
14868+
case Builtin::BI__builtin_fminimum_num:
14869+
case Builtin::BI__builtin_fminimum_numf:
14870+
case Builtin::BI__builtin_fminimum_numl:
14871+
case Builtin::BI__builtin_fminimum_numf16:
14872+
case Builtin::BI__builtin_fminimum_numf128: {
14873+
APFloat RHS(0.);
14874+
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
14875+
!EvaluateFloat(E->getArg(1), RHS, Info))
14876+
return false;
14877+
Result = minimumnum(Result, RHS);
14878+
return true;
14879+
}
14880+
1485414881
}
1485514882
}
1485614883

clang/test/Preprocessor/feature_tests.cpp

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

5555
// Check __has_constexpr_builtin
5656
#if !__has_constexpr_builtin(__builtin_fmax) || \
57-
!__has_constexpr_builtin(__builtin_fmin)
57+
!__has_constexpr_builtin(__builtin_fmin) || \
58+
!__has_constexpr_builtin(__builtin_fmaximum_num) || \
59+
!__has_constexpr_builtin(__builtin_fmaximum_num)
5860
#error Clang should have these constexpr builtins
5961
#endif
6062

0 commit comments

Comments
 (0)