[PATCH] D83213: [AST][RecoveryExpr] Don't set the instantiation-bit.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 7 03:14:29 PDT 2020


sammccall added a comment.

What's the rationale/motivation for this? I'd expect this to break a lot of subtle assumptions, because the invariant "nothing can be dependent without being instantiation-dependent" is a useful one.

It also doesn't seem correct from first principles. My mental model is:

- dependence describes code where some properties are unknown because a template wasn't instantiated yet
- we've generalized this to "some properties are unknown because we don't know what this piece of code is supposed to say"
- we can never know the value at compile-time even in contexts where we should, so RecoveryExpr is value-dependent
- we only know the type at compile-time if the RecoveryExpr's type is known and not itself dependent, so RecoveryExpr is usually value-dependent
- the code may intend to refer to entities valid only in certain instantiations (consider `(void)f(T())` where f is an overloaded function). So RecoveryExpr is at least sometimes instantiation-dependent

At best I think we could say that the expr is only instantiation-dependent if it occurs in a template scope - otherwise there's no template we might fail to instantiate.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83213/new/

https://reviews.llvm.org/D83213





More information about the cfe-commits mailing list