Is there any better codepath we could use that would reuse the checking for non-member functions?
How does this interact with templates? On Sun Jan 05 2014 at 11:15:36 PM, Saleem Abdulrasool <[email protected]> wrote: > Avoid double diagnostics generation for constructors. > > Hi rsmith, > > http://llvm-reviews.chandlerc.com/D2514 > > CHANGE SINCE LAST DIFF > http://llvm-reviews.chandlerc.com/D2514?vs=6361&id=6362#toc > > Files: > lib/Sema/SemaExprCXX.cpp > test/Analysis/PR18393.cpp > > Index: lib/Sema/SemaExprCXX.cpp > =================================================================== > --- lib/Sema/SemaExprCXX.cpp > +++ lib/Sema/SemaExprCXX.cpp > @@ -4946,6 +4946,13 @@ > bool IsDecltype = ExprEvalContexts.back().IsDecltype; > CXXDestructorDecl *Destructor = IsDecltype ? 0 : LookupDestructor(RD); > > + if (!IsDecltype && RD->isAbstract() && !isa<CXXConstructExpr>(E)) { > + Diag(E->getExprLoc(), diag::err_abstract_type_in_decl) > + << Sema::AbstractReturnType << RT->desugar(); > + DiagnoseAbstractType(RD); > + return Owned(E); > + } > + > if (Destructor) { > MarkFunctionReferenced(E->getExprLoc(), Destructor); > CheckDestructorAccess(E->getExprLoc(), Destructor, > Index: test/Analysis/PR18393.cpp > =================================================================== > --- /dev/null > +++ test/Analysis/PR18393.cpp > @@ -0,0 +1,26 @@ > +// RUN: %clang_cc1 -fsyntax-only -verify %s > +// PR18393 > + > +struct base { > + virtual void method() = 0; > + // expected-note@-1 {{unimplemented pure virtual method 'method' in > 'base'}} > +}; > + > +struct derived : base { > + virtual void method(); > +}; > + > +struct holder { > + holder() : d_() {} > + base get() const { return d_; } > + const derived d_; > +}; > + > +void function(const base &); > + > +void test() { > + holder h; > + function(h.get()); > + // expected-error@-1 {{return type 'base' is an abstract class}} > +} > + > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
