rjmccall added a comment. In D55662#1336835 <https://reviews.llvm.org/D55662#1336835>, @ahatanak wrote:
> In D55662#1335773 <https://reviews.llvm.org/D55662#1335773>, @rjmccall wrote: > > > Okay. You may need to push an unevaluated context when doing that. > > > Since I'm just moving the call to `CheckPlaceholderExpr` to the call site, I > don't think I have to push an unevaluated context there? Hmm. Right, for the `auto` inference specifically it's fine because the expression is in fact evaluated: we're not just eliminating placeholders in order to resolve `decltype`, we're eliminating placeholders to actually figure out what's going on with the initialization. > Also, it looks like I can just change the check > `Init->getType()->isNonOverloadPlaceholderType()` at the beginning of > `Sema::DeduceAutoType` to `Init->getType()->getAsPlaceholderType()` instead > of inserting the call to `CheckPlaceholderExpr` right before the call to > `BuildDecltypeType`. The reason it's specifically checking for a non-overload placeholder is that normal `auto` can have additional structure in the declarator that could potentially resolve an overload set without picking a single template specialization. So you can only check for an arbitrary placeholder if this is the `decltype(auto)` case. But I agree that it still makes sense to only do this once up front, yeah. ================ Comment at: lib/Sema/SemaType.cpp:8043 QualType Sema::BuildTypeofExprType(Expr *E, SourceLocation Loc) { - ExprResult ER = CheckPlaceholderExpr(E); - if (ER.isInvalid()) return QualType(); - E = ER.get(); + assert(!E->getType()->getAsPlaceholderType() && "unexpected placeholder"); ---------------- There is a `isPlaceholderType()` method that looks a little cleaner than a `getAs` call. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D55662/new/ https://reviews.llvm.org/D55662 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits