This is exactly the problem - that's what I'd expect from the warning text, but
apparently, that is not what actually happens.
For "assume(a > 0 && i++)" the entire assumption gets thrown out.
void foo(int a, int b)
{
__builtin_assume(a > 0 && b++);
}
>clang -O0 -c -S -o - -emit-llvm assume.c
assume.c:3:20: warning: the argument to '__builtin_assume' has side effects
that will be discarded [-Wassume]
__builtin_assume(a > 0 && b++);
^~~~~~~~~~~~
; ModuleID = 'assume.c'
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
; Function Attrs: nounwind uwtable
define void @foo(i32 %a, i32 %b) #0 {
entry:
%b.addr = alloca i32, align 4
%a.addr = alloca i32, align 4
store i32 %b, i32* %b.addr, align 4
store i32 %a, i32* %a.addr, align 4
ret void
}
-----Original Message-----
From: Aaron Ballman [mailto:[email protected]]
Sent: Monday, March 23, 2015 18:01
To: [email protected]
Cc: Kuperstein, Michael M; Hal Finkel; Richard Smith; llvm cfe
Subject: Re: [PATCH] Have HasSideEffects() return false for
__attribute__((const)) functions
On Mon, Mar 23, 2015 at 11:47 AM, Michael Kuperstein
<[email protected]> wrote:
> Also, there's something a bit odd about the warning text for an assume with
> side-effects.
>
> "the argument to '__assume' has side effects that will be discarded" suggests
> that only the side effects will be discarded.
Which is correct. The side effects are unevaluated, but __assume is not. Think:
sizeof(i++). i will not be incremented, but sizeof is still evaluated and
produces a result.
> This:
> (a) doesn't make a lot of sense to me, and
> (b) doesn't imply that nothing at all will be emitted.
> That is, for "assume(a > 0 && i++)", the warning would make me expect that
> what I ended up with was equivalent to "assume(a > 0)" or perhaps "assume(a >
> 0 && i)".
The latter is correct, not the former.
>
> Is this just a problem with how I'm reading the warning? If not, any
> suggestions for alternative text?
I'm not certain where the confusion lies, but if there is alternative text that
would be more clear, then great!
~Aaron
>
>
> 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