On Mon, Mar 23, 2015 at 12:09 PM, Kuperstein, Michael M
<[email protected]> wrote:
> 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.
Ah, I had not picked up on the fact that this is the assume-specific
behavior, not just the usual unevaluated argument warning. Sorry for
my confusion!
~Aaron
>
> 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