diff options
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 23 | 
1 files changed, 17 insertions, 6 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 0892f966ac2eb..805fe6684205c 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -212,6 +212,14 @@ public:      return T.isNull();    } +  /// Transform a template parameter depth level. +  /// +  /// During a transformation that transforms template parameters, this maps +  /// an old template parameter depth to a new depth. +  unsigned TransformTemplateDepth(unsigned Depth) { +    return Depth; +  } +    /// Determine whether the given call argument should be dropped, e.g.,    /// because it is a default argument.    /// @@ -2527,8 +2535,9 @@ public:    /// By default, performs semantic analysis to build the new expression.    /// Subclasses may override this routine to provide different behavior.    ExprResult RebuildStmtExpr(SourceLocation LParenLoc, Stmt *SubStmt, -                             SourceLocation RParenLoc) { -    return getSema().ActOnStmtExpr(nullptr, LParenLoc, SubStmt, RParenLoc); +                             SourceLocation RParenLoc, unsigned TemplateDepth) { +    return getSema().BuildStmtExpr(LParenLoc, SubStmt, RParenLoc, +                                   TemplateDepth);    }    /// Build a new __builtin_choose_expr expression. @@ -10345,16 +10354,18 @@ TreeTransform<Derived>::TransformStmtExpr(StmtExpr *E) {      return ExprError();    } -  if (!getDerived().AlwaysRebuild() && +  unsigned OldDepth = E->getTemplateDepth(); +  unsigned NewDepth = getDerived().TransformTemplateDepth(OldDepth); + +  if (!getDerived().AlwaysRebuild() && OldDepth == NewDepth &&        SubStmt.get() == E->getSubStmt()) {      // Calling this an 'error' is unintuitive, but it does the right thing.      SemaRef.ActOnStmtExprError();      return SemaRef.MaybeBindToTemporary(E);    } -  return getDerived().RebuildStmtExpr(E->getLParenLoc(), -                                      SubStmt.get(), -                                      E->getRParenLoc()); +  return getDerived().RebuildStmtExpr(E->getLParenLoc(), SubStmt.get(), +                                      E->getRParenLoc(), NewDepth);  }  template<typename Derived>  | 
