[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