Commit 988b10e3 authored by Bill Wendling's avatar Bill Wendling
Browse files

Merging r155670:

------------------------------------------------------------------------
r155670 | efriedma | 2012-04-26 15:43:24 -0700 (Thu, 26 Apr 2012) | 3 lines

Add a missing ExpressionEvaluationContext for template default arguments.  Fixes PR12581.


------------------------------------------------------------------------

llvm-svn: 155671
parent 584eaadb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -652,6 +652,7 @@ Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {
    //   end of the template-parameter-list rather than a greater-than
    //   operator.
    GreaterThanIsOperatorScope G(GreaterThanIsOperator, false);
    EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated);

    DefaultArg = ParseAssignmentExpression();
    if (DefaultArg.isInvalid())
+1 −0
Original line number Diff line number Diff line
@@ -2546,6 +2546,7 @@ SubstDefaultTemplateArgument(Sema &SemaRef,
                                   SourceRange(TemplateLoc, RAngleLoc));

  Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
  EnterExpressionEvaluationContext Unevaluated(SemaRef, Sema::Unevaluated);
  return SemaRef.SubstExpr(Param->getDefaultArgument(), AllTemplateArgs);
}

+11 −0
Original line number Diff line number Diff line
@@ -292,3 +292,14 @@ namespace PR8401 {
    f();
  }
}

namespace PR12581 {
  const int a = 0;
  template < typename > struct A;
  template < typename MatrixType, int =
  A < MatrixType >::Flags ? : A < MatrixType >::Flags & a > class B;
  void
  fn1 ()
  {
  }
}