Index: lib/Sema/TreeTransform.h =================================================================== --- lib/Sema/TreeTransform.h +++ lib/Sema/TreeTransform.h @@ -8304,6 +8304,9 @@ ExprResult LHS = getDerived().TransformExpr(E->getLHS()); if (LHS.isInvalid()) return ExprError(); + if (E->getLHS()->getLocStart().isInvalid()) { + return ExprError(); + } ExprResult RHS = getDerived().TransformExpr(E->getRHS()); if (RHS.isInvalid()) @@ -8316,7 +8319,7 @@ return E; return getDerived().RebuildArraySubscriptExpr(LHS.get(), - /*FIXME:*/E->getLHS()->getLocStart(), + E->getLHS()->getLocStart(), RHS.get(), E->getRBracketLoc()); } Index: test/Sema/PR25668.cpp =================================================================== --- /dev/null +++ test/Sema/PR25668.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -verify -fsyntax-only -std=c++11 %s +// expected-no-assertion-crash + +template class A {}; +class { + A operator[](int); +} mask_ { + mask[2]; // expected-error{{use of undeclared identifier 'mask'}} +};