On May 15, 2012, at 12:45 PM, Daniel Dunbar <[email protected]> wrote:
> Hey Doug, > > There is a test failing on this bot, looks most likely to be yours? > > http://lab.llvm.org:8011/builders/clang-x86_64-debian-selfhost-rel/builds/2943 > > Not sure if this is known… Frustrating. I can't reproduce this failure anywhere. - Doug > - Daniel > > On Fri, May 4, 2012 at 10:10 AM, Douglas Gregor <[email protected]> wrote: >> Author: dgregor >> Date: Fri May 4 12:09:59 2012 >> New Revision: 156180 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=156180&view=rev >> Log: >> Move Sema::RequireNonAbstractType() off of PartialDiagnostic. >> >> Modified: >> cfe/trunk/include/clang/Sema/Sema.h >> cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> cfe/trunk/lib/Sema/SemaExpr.cpp >> cfe/trunk/lib/Sema/SemaExprCXX.cpp >> >> Modified: cfe/trunk/include/clang/Sema/Sema.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=156180&r1=156179&r2=156180&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Sema/Sema.h (original) >> +++ cfe/trunk/include/clang/Sema/Sema.h Fri May 4 12:09:59 2012 >> @@ -4423,7 +4423,31 @@ >> }; >> >> bool RequireNonAbstractType(SourceLocation Loc, QualType T, >> - const PartialDiagnostic &PD); >> + TypeDiagnoser &Diagnoser); >> + template<typename T1> >> + bool RequireNonAbstractType(SourceLocation Loc, QualType T, >> + unsigned DiagID, >> + const T1 &Arg1) { >> + BoundTypeDiagnoser1<T1> Diagnoser(DiagID, Arg1); >> + return RequireNonAbstractType(Loc, T, Diagnoser); >> + } >> + >> + template<typename T1, typename T2> >> + bool RequireNonAbstractType(SourceLocation Loc, QualType T, >> + unsigned DiagID, >> + const T1 &Arg1, const T2 &Arg2) { >> + BoundTypeDiagnoser2<T1, T2> Diagnoser(DiagID, Arg1, Arg2); >> + return RequireNonAbstractType(Loc, T, Diagnoser); >> + } >> + >> + template<typename T1, typename T2, typename T3> >> + bool RequireNonAbstractType(SourceLocation Loc, QualType T, >> + unsigned DiagID, >> + const T1 &Arg1, const T2 &Arg2, const T3 >> &Arg3) { >> + BoundTypeDiagnoser3<T1, T2, T3> Diagnoser(DiagID, Arg1, Arg2, Arg3); >> + return RequireNonAbstractType(Loc, T, Diagnoser); >> + } >> + >> void DiagnoseAbstractType(const CXXRecordDecl *RD); >> >> bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned >> DiagID, >> >> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=156180&r1=156179&r2=156180&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Fri May 4 12:09:59 2012 >> @@ -3396,19 +3396,32 @@ >> >> bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T, >> unsigned DiagID, AbstractDiagSelID SelID) { >> - if (SelID == -1) >> - return RequireNonAbstractType(Loc, T, PDiag(DiagID)); >> - else >> - return RequireNonAbstractType(Loc, T, PDiag(DiagID) << SelID); >> + class NonAbstractTypeDiagnoser : public TypeDiagnoser { >> + unsigned DiagID; >> + AbstractDiagSelID SelID; >> + >> + public: >> + NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID) >> + : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { } >> + >> + virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) { >> + if (SelID == -1) >> + S.Diag(Loc, DiagID) << T; >> + else >> + S.Diag(Loc, DiagID) << SelID << T; >> + } >> + } Diagnoser(DiagID, SelID); >> + >> + return RequireNonAbstractType(Loc, T, Diagnoser); >> } >> >> bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T, >> - const PartialDiagnostic &PD) { >> + TypeDiagnoser &Diagnoser) { >> if (!getLangOpts().CPlusPlus) >> return false; >> >> if (const ArrayType *AT = Context.getAsArrayType(T)) >> - return RequireNonAbstractType(Loc, AT->getElementType(), PD); >> + return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser); >> >> if (const PointerType *PT = T->getAs<PointerType>()) { >> // Find the innermost pointer type. >> @@ -3416,7 +3429,7 @@ >> PT = T; >> >> if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType())) >> - return RequireNonAbstractType(Loc, AT->getElementType(), PD); >> + return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser); >> } >> >> const RecordType *RT = T->getAs<RecordType>(); >> @@ -3435,7 +3448,7 @@ >> if (!RD->isAbstract()) >> return false; >> >> - Diag(Loc, PD) << RD->getDeclName(); >> + Diagnoser.diagnose(*this, Loc, T); >> DiagnoseAbstractType(RD); >> >> return true; >> >> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=156180&r1=156179&r2=156180&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Fri May 4 12:09:59 2012 >> @@ -9205,9 +9205,9 @@ >> return ExprError(); >> >> if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), >> - TInfo->getType(), >> - PDiag(diag::err_second_parameter_to_va_arg_abstract) >> - << TInfo->getTypeLoc().getSourceRange())) >> + TInfo->getType(), >> + >> diag::err_second_parameter_to_va_arg_abstract, >> + TInfo->getTypeLoc())) >> return ExprError(); >> >> if (!TInfo->getType().isPODType(Context)) { >> >> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=156180&r1=156179&r2=156180&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Fri May 4 12:09:59 2012 >> @@ -590,8 +590,7 @@ >> return ExprError(); >> >> if (RequireNonAbstractType(ThrowLoc, E->getType(), >> - PDiag(diag::err_throw_abstract_type) >> - << E->getSourceRange())) >> + diag::err_throw_abstract_type, E)) >> return ExprError(); >> } >> >> >> >> _______________________________________________ >> 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
