[cfe-dev] Handling of builtin_constant_p

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Sat Oct 28 17:11:42 PDT 2017

On 26 October 2017 at 20:22, Bharathi Seshadri via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hi,
> I'm trying to understand where __builtin_constant_p is folded in the
> front-end. It appears to be handled differently when placed in an if
> condition or in a conditional expression.
> In the example below, I see that it is folded in
> CodeGenFunction::EmitBuiltinExpr() in CGBuiltin.cpp
> int x = __builtin_constant_p(100);
> But for cases like the ones below, it appears to be folded much
> earlier and it doesn't reach EmitBuiltinExpr().
> int x = __builtin_constant_p(100)? 10: 20;
> if (__builtin_constant_p(100)) { ... }
> Any pointers on what functions to look up for the above case would be
> very helpful.

In some cases, Clang tries to constant-evaluate expressions rather than
emitting them directly. (C and C++ require this to be done in some cases
for variable initializers, particularly for globals, and Clang also tries
it when it emits some conditional branches, to avoid even emitting
trivially-unreachable code when the branch condition is constant). The
constant expression evaluation lives in lib/AST/ExprConstant.cpp, and knows
how to evaluate many of Clang's builtins (but not all of them).

> Thanks,
> Bharathi
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171028/88e28f48/attachment.html>

More information about the cfe-dev mailing list