On Thu, Jun 9, 2016 at 7:26 AM, David Majnemer via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: majnemer > Date: Thu Jun 9 00:26:56 2016 > New Revision: 272247 > > URL: http://llvm.org/viewvc/llvm-project?rev=272247&view=rev > Log: > [Sema] Don't crash when a field w/ a mem-initializer clashes with a record > name > > It is possible for a field and a class to have the same name. In such > cases, performing lookup for the field might return a result set with > more than one entry. An overzealous assertion fired, causing us to > crash instead of using the non-class lookup result. > > This fixes PR28060. > > Modified: > cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp > cfe/trunk/test/SemaCXX/member-init.cpp > > Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp?rev=272247&r1=272246&r2=272247&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp (original) > +++ cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp Thu Jun 9 00:26:56 2016 > @@ -2637,8 +2637,7 @@ Sema::InstantiateClassMembers(SourceLoca > Instantiation->getTemplateInstantiationPattern(); > DeclContext::lookup_result Lookup = > ClassPattern->lookup(Field->getDeclName()); > - assert(Lookup.size() == 1); > - FieldDecl *Pattern = cast<FieldDecl>(Lookup[0]); > + FieldDecl *Pattern = cast<FieldDecl>(Lookup.front()); > InstantiateInClassInitializer(PointOfInstantiation, Field, Pattern, > TemplateArgs); > }
Now what if there is no match? Or is that guaranteed (given the prior assert)? - Kim _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits