Add a RequireCompleteType variant that takes a PartialDiagnostic. The old RequireCompleteType now creates a PartialDiagnostic and calls the new function.
llvm-svn: 80165
This commit is contained in:
parent
4fa923c5bc
commit
f68079e77b
|
@ -19,6 +19,7 @@
|
||||||
#include "clang/AST/DeclObjC.h"
|
#include "clang/AST/DeclObjC.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
#include "clang/Lex/Preprocessor.h"
|
#include "clang/Lex/Preprocessor.h"
|
||||||
|
#include "clang/Basic/PartialDiagnostic.h"
|
||||||
#include "clang/Basic/TargetInfo.h"
|
#include "clang/Basic/TargetInfo.h"
|
||||||
using namespace clang;
|
using namespace clang;
|
||||||
|
|
||||||
|
@ -362,6 +363,15 @@ Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sema::SemaDiagnosticBuilder
|
||||||
|
Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
|
||||||
|
SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
|
||||||
|
PD.Emit(Builder);
|
||||||
|
|
||||||
|
return Builder;
|
||||||
|
}
|
||||||
|
|
||||||
void Sema::ActOnComment(SourceRange Comment) {
|
void Sema::ActOnComment(SourceRange Comment) {
|
||||||
Context.Comments.push_back(Comment);
|
Context.Comments.push_back(Comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -401,6 +401,9 @@ public:
|
||||||
return SemaDiagnosticBuilder(DB, *this, DiagID);
|
return SemaDiagnosticBuilder(DB, *this, DiagID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Emit a partial diagnostic.
|
||||||
|
SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD);
|
||||||
|
|
||||||
virtual void DeleteExpr(ExprTy *E);
|
virtual void DeleteExpr(ExprTy *E);
|
||||||
virtual void DeleteStmt(StmtTy *S);
|
virtual void DeleteStmt(StmtTy *S);
|
||||||
|
|
||||||
|
@ -484,7 +487,9 @@ public:
|
||||||
SourceRange Range1 = SourceRange(),
|
SourceRange Range1 = SourceRange(),
|
||||||
SourceRange Range2 = SourceRange(),
|
SourceRange Range2 = SourceRange(),
|
||||||
QualType PrintType = QualType());
|
QualType PrintType = QualType());
|
||||||
|
bool RequireCompleteType(SourceLocation Loc, QualType T,
|
||||||
|
const PartialDiagnostic &PD);
|
||||||
|
|
||||||
QualType getQualifiedNameType(const CXXScopeSpec &SS, QualType T);
|
QualType getQualifiedNameType(const CXXScopeSpec &SS, QualType T);
|
||||||
|
|
||||||
QualType BuildTypeofExprType(Expr *E);
|
QualType BuildTypeofExprType(Expr *E);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "clang/AST/DeclTemplate.h"
|
#include "clang/AST/DeclTemplate.h"
|
||||||
#include "clang/AST/TypeLoc.h"
|
#include "clang/AST/TypeLoc.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
|
#include "clang/Basic/PartialDiagnostic.h"
|
||||||
#include "clang/Parse/DeclSpec.h"
|
#include "clang/Parse/DeclSpec.h"
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
using namespace clang;
|
using namespace clang;
|
||||||
|
@ -1772,6 +1773,18 @@ void Sema::ProcessTypeAttributeList(QualType &Result, const AttributeList *AL) {
|
||||||
bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, unsigned diag,
|
bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, unsigned diag,
|
||||||
SourceRange Range1, SourceRange Range2,
|
SourceRange Range1, SourceRange Range2,
|
||||||
QualType PrintType) {
|
QualType PrintType) {
|
||||||
|
if (!PrintType.isNull())
|
||||||
|
return RequireCompleteType(Loc, T,
|
||||||
|
PDiag(diag) << Range1 << Range2 << PrintType);
|
||||||
|
|
||||||
|
return RequireCompleteType(Loc, T,
|
||||||
|
PDiag(diag) << Range1 << Range2);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
|
||||||
|
const PartialDiagnostic &PD) {
|
||||||
|
unsigned diag = PD.getDiagID();
|
||||||
|
|
||||||
// FIXME: Add this assertion to help us flush out problems with
|
// FIXME: Add this assertion to help us flush out problems with
|
||||||
// checking for dependent types and type-dependent expressions.
|
// checking for dependent types and type-dependent expressions.
|
||||||
//
|
//
|
||||||
|
@ -1816,11 +1829,8 @@ bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, unsigned diag,
|
||||||
if (diag == 0)
|
if (diag == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (PrintType.isNull())
|
|
||||||
PrintType = T;
|
|
||||||
|
|
||||||
// We have an incomplete type. Produce a diagnostic.
|
// We have an incomplete type. Produce a diagnostic.
|
||||||
Diag(Loc, diag) << PrintType << Range1 << Range2;
|
Diag(Loc, PD) << T;
|
||||||
|
|
||||||
// If the type was a forward declaration of a class/struct/union
|
// If the type was a forward declaration of a class/struct/union
|
||||||
// type, produce
|
// type, produce
|
||||||
|
|
Loading…
Reference in New Issue