[cfe-commits] r156180 - in /cfe/trunk: include/clang/Sema/Sema.h lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExpr.cpp lib/Sema/SemaExprCXX.cpp

Daniel Dunbar daniel at zuster.org
Tue May 15 12:45:08 PDT 2012


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...

 - 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