aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-10-02 23:30:31 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-10-02 23:30:31 +0000
commitae3f4919e4805f59c554d39cb9cd3a601809b2cb (patch)
tree8a4d321aee06a9fa6259449fbe0f764ce181b457 /lib/AST/Expr.cpp
parentde45428f923b38d80407dbb9ede0df504256f9f6 (diff)
Add Builtins.def attribute for "can be a constant expression".
- Enabled for builtins which are always constant expressions (__builtin_huge_val*, __builtin_inf*, __builtin_constant_p, __builtin_classify_type, __builtin___CFStringMakeConstantString). Added Builtin::Context::isConstantExpr. - Currently overly simply interface which only works for builtins whose constantexprness does not depend on their arguments. CallExpr::isBuiltinConstantExpr now takes an ASTContext argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56983 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Expr.cpp')
-rw-r--r--lib/AST/Expr.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 6a4b6b0493..14b7b51ebb 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -139,7 +139,7 @@ void CallExpr::setNumArgs(unsigned NumArgs) {
this->NumArgs = NumArgs;
}
-bool CallExpr::isBuiltinConstantExpr() const {
+bool CallExpr::isBuiltinConstantExpr(ASTContext &Ctx) const {
// All simple function calls (e.g. func()) are implicitly cast to pointer to
// function. As a result, we try and obtain the DeclRefExpr from the
// ImplicitCastExpr.
@@ -159,10 +159,7 @@ bool CallExpr::isBuiltinConstantExpr() const {
if (!builtinID)
return false;
- // We have a builtin that is a constant expression
- return builtinID == Builtin::BI__builtin___CFStringMakeConstantString ||
- builtinID == Builtin::BI__builtin_classify_type ||
- builtinID == Builtin::BI__builtin_huge_valf;
+ return Ctx.BuiltinInfo.isConstantExpr(builtinID);
}
bool CallExpr::isBuiltinClassifyType(llvm::APSInt &Result) const {
@@ -585,7 +582,7 @@ bool Expr::isConstantExpr(ASTContext &Ctx, SourceLocation *Loc) const {
return true;
case CallExprClass: {
const CallExpr *CE = cast<CallExpr>(this);
- if (CE->isBuiltinConstantExpr())
+ if (CE->isBuiltinConstantExpr(Ctx))
return true;
if (Loc) *Loc = getLocStart();
return false;