Hi,
I've started some work on skipping validation of expressions that have
dependent types and/or values. Am I doing it right?
Sebastian
validation.patch (7.66 KB)
Hi,
I've started some work on skipping validation of expressions that have
dependent types and/or values. Am I doing it right?
Sebastian
validation.patch (7.66 KB)
Yes, you're on the right track. A few meta-comments:
1) Whenever you have an expression 'E', prefer E->isTypeDependent() to E->getType()->isDependentType(). I think you're doing that already.
2) In addition to updating Sema's type checking for value-dependent and type-dependent expressions, we also need to propagate those dependencies by updating the *Expr nodes themselves compute value- and type-dependence. For example, while updating the checking for array subscripting, we should also update ArraySubscriptExpr's constructor to accept (or compute) value- and type-dependence of the expression. For example, CallExpr has been updated to do this, and it uses
CallExpr::CallExpr(ASTContext& C, StmtClass SC, Expr *fn, Expr **args,
unsigned numargs, QualType t, SourceLocation rparenloc)
: Expr(SC, t,
fn->isTypeDependent() || hasAnyTypeDependentArguments(args, numargs),
fn->isValueDependent() || hasAnyValueDependentArguments(args,numargs)),
NumArgs(numargs) {
There's a big FIXME in the Expr class that will be addressed once *all* Expr nodes properly compute their type/value-dependence:
// FIXME: Eventually, this constructor should go away and we should
// require every subclass to provide type/value-dependence
// information.
Expr(StmtClass SC, QualType T)
: Stmt(SC), TypeDependent(false), ValueDependent(false) {
setType(T);
}
Thanks for working on this!
- Doug