summaryrefslogtreecommitdiffstats
path: root/clang/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
commitdc2ab1740ab7c46d9bb921f83504b567e60d1ff8 (patch)
tree2aaa81b343d239f34b1abd144bf69778496a9119 /clang/lib/AST/Expr.cpp
parent009db89513e8fbe0327e86562c3df0b41ac38595 (diff)
downloadbcm5719-llvm-dc2ab1740ab7c46d9bb921f83504b567e60d1ff8.tar.gz
bcm5719-llvm-dc2ab1740ab7c46d9bb921f83504b567e60d1ff8.zip
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. llvm-svn: 56983
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r--clang/lib/AST/Expr.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 6a4b6b0493d..14b7b51ebb0 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/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;
OpenPOWER on IntegriCloud