[cfe-commits] r156180 - in /cfe/trunk: include/clang/Sema/Sema.h lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExpr.cpp lib/Sema/SemaExprCXX.cpp
Douglas Gregor
dgregor at apple.com
Tue May 15 13:52:33 PDT 2012
On May 15, 2012, at 12:45 PM, Daniel Dunbar <daniel at zuster.org> 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 <dgregor at apple.com> 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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list