[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