On Wed, Jun 26, 2013 at 6:50 PM, Larisse Voufo <[email protected]> wrote:
> Author: lvoufo > Date: Wed Jun 26 20:50:25 2013 > New Revision: 185056 > > URL: http://llvm.org/viewvc/llvm-project?rev=185056&view=rev > Log: > Fix a conversion to incomplete type bug -- The error message now > specifically states that the type is incomplete and points to the forward > declaration of the incomplete type. > > Added: > cfe/trunk/test/SemaCXX/conversion-incomplete-type.cpp > Modified: > cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > cfe/trunk/lib/Sema/SemaInit.cpp > cfe/trunk/lib/Sema/SemaOverload.cpp > > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=185056&r1=185055&r2=185056&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Jun 26 > 20:50:25 2013 > @@ -5014,6 +5014,8 @@ def err_typecheck_ambiguous_condition : > "conversion %diff{from $ to $|between types}0,1 is ambiguous">; > def err_typecheck_nonviable_condition : Error< > "no viable conversion%diff{ from $ to $|}0,1">; > +def err_typecheck_nonviable_condition_incomplete : Error< > + "no viable conversion%diff{ from $ to incomplete type $|}0,1">; > def err_typecheck_deleted_function : Error< > "conversion function %diff{from $ to $|between types}0,1 " > "invokes a deleted function">; > > Modified: cfe/trunk/lib/Sema/SemaInit.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=185056&r1=185055&r2=185056&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaInit.cpp (original) > +++ cfe/trunk/lib/Sema/SemaInit.cpp Wed Jun 26 20:50:25 2013 > @@ -6251,9 +6251,15 @@ bool InitializationSequence::Diagnose(Se > break; > > case OR_No_Viable_Function: > - S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) > - << Args[0]->getType() << DestType.getNonReferenceType() > - << Args[0]->getSourceRange(); > + if (!DestType.getNonReferenceType()->isIncompleteType() || > + !S.RequireCompleteType(Kind.getLocation(), > + DestType.getNonReferenceType(), > + > diag::err_typecheck_nonviable_condition_incomplete, > + Args[0]->getType(), > Args[0]->getSourceRange())) > + S.Diag(Kind.getLocation(), > diag::err_typecheck_nonviable_condition) > + << Args[0]->getType() << Args[0]->getSourceRange() > + << DestType.getNonReferenceType(); > > You don't need to call isIncompleteType() before calling RequireCompleteType(). -Eli
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
