<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class="">On May 26, 2018, at 1:51 PM, ThePhD via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>> wrote:</div><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class="">Dear cfe-dev,<br class=""><br class=""></div>     I am new at hacking on Clang and I've made a decent amount of forward progress in defining my own Constant Expression builtin for C++. It takes arguments which must be compile-time evaluatable. This worked out just fine so far, and has allowed me to get started on implementing <a href="https://rawgit.com/ThePhD/embed/master/papers/P1040%20-%20embed.html" class="">std::embed</a>.<br class=""><br class=""></div>     I wanted to wrap my Constant Expression builtin in a C++-defined `constexpr` function. The problem with this is that any argument passed to my wrapping function that used my builtin ended up becoming non-evaluatable in *Visit calls during the Sema::ActOnFinish* phase.<br class=""><br class=""></div>     This has a few consequences. My wrapper function uses 2 less arguments than my builtin currently, passing 2 variables to the builtin to be filled in as output parameters, and then placed into a nice struct the user can use (unsigned char* and a size_t). I lose the interface if I use the builtin directly and someone has to provide the output parameters.<br class=""><br class=""></div>     I tried to use the "t" specifier on the Builtin in Builtin.def to let me define my own type checking, but so far it seems like even with "t" I can't make my builtin have a signature that returns a custom structure.<br class=""></div></div></div></div></div></div></div></blockquote><div><br class=""></div>Are you trying to cast the result of the CallExpr?  You should just set it directly; that's allowed for custom-typechecked builtins.</div><div><br class=""></div><div>John.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class=""><div class=""><div class=""><br class=""></div>     Does anyone know how I would begin to work around these problems? My first interest is to make the builtin I wrote match the struct-returning interface I need. That would allow me to drop the 2 output parameters and instead return a structure. I do not know how to do this.<br class=""><br class=""></div>     My second idea is to abandon defining it through Builtins.def altogether, but I'm not sure how to go about defining a builtin that's not part of that list.<br class=""><br class=""></div>     Does anyone have any insight into this?<br class=""><br class=""></div>Sincerely and Hopefully,<br class=""></div>ThePhD<br class=""></div>
_______________________________________________<br class="">cfe-dev mailing list<br class=""><a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev<br class=""></div></blockquote></div><br class=""></body></html>