I think PureAttr isn't strong enough.
char foo(char *a)
{
return *a;
}
is pure, but isn't side-effect free.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 23, 2015 18:20
To: Kuperstein, Michael M; [email protected]; [email protected];
[email protected]
Cc: [email protected]
Subject: Re: [PATCH] Have HasSideEffects() return false for
__attribute__((const)) functions
================
Comment at: lib/AST/Expr.cpp:2953
@@ +2952,3 @@
+ const Decl *FD = cast<CallExpr>(this)->getCalleeDecl();
+ bool IsConst = FD && FD->hasAttr<ConstAttr>();
+ if (IsConst || !IncludePossibleEffects)
----------------
You're checking for ConstAttr here, which is fine, but I think that we can do
more:
This is allowed:
static int i;
void foo() {
__builtin_assume(i > 0);
}
and so we can also check for PureAttr. And what about constexpr functions?
http://reviews.llvm.org/D8548
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
---------------------------------------------------------------------
Intel Israel (74) Limited
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits