I'll update, thanks!

================
Comment at: docs/LanguageExtensions.rst:1267-1269
@@ +1266,5 @@
+
+The boolean argument to this function is defined to be true. The optimizer may
+analyze the expression used to compute the argument and deduce from that
+information used to optimize the program. If the condition is violated during
+execution, the behavior is undefined.
----------------
Richard Smith wrote:
> You should indicate whether and when the condition is evaluated here. IIRC, 
> MS' `__assume` does not evaluate its argument, so if this builtin differs 
> from that we should be explicit about that difference.
Interesting point. MS's documentation says, "no code is generated", but does 
not otherwise specify the semantics of what is done with the arguments. With 
the LLVM intrinsic, although IR is generated, no assembly is generated.

Are you asking whether __assume is more like decltype? Or could __assume(*a > 
0) trap if a were nullptr? I'm pretty sure that the answers are no and yes, 
respectively. MS's documentation specifically talks about using __assume as a 
production-build replacement for assert, and I assume so must evaluate its 
inputs in a similar-enough way to make that workable.

http://reviews.llvm.org/D149



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to