Index: lib/Sema/SemaExprCXX.cpp =================================================================== --- lib/Sema/SemaExprCXX.cpp +++ lib/Sema/SemaExprCXX.cpp @@ -6798,7 +6798,15 @@ ObjectType = ParsedType::make(BaseType); MayBePseudoDestructor = true; return Base; - } else if (!BaseType->isRecordType()) { + } + + if (BaseType->isExtVectorType()) { + ObjectType = ParsedType::make(BaseType); + MayBePseudoDestructor = true; + return Base; + } + + if (!BaseType->isRecordType()) { ObjectType = nullptr; MayBePseudoDestructor = true; return Base; Index: test/SemaCXX/vector.cpp =================================================================== --- test/SemaCXX/vector.cpp +++ test/SemaCXX/vector.cpp @@ -333,4 +333,10 @@ const PR15730<8, char>::type2 PR15730_2 = {}; } +// This used to be rejected because the name lookup determined 'x' in 'a.x' was +// a template name. +bool templateName(char16_e a, char16_e b) { + return a.x < b.x && b.y > a.y; +} + } // namespace Templates