]> granicus.if.org Git - clang/commitdiff
Add a RequireCompleteType variant that takes a PartialDiagnostic. The old RequireComp...
authorAnders Carlsson <andersca@mac.com>
Wed, 26 Aug 2009 22:33:56 +0000 (22:33 +0000)
committerAnders Carlsson <andersca@mac.com>
Wed, 26 Aug 2009 22:33:56 +0000 (22:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80165 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/Sema.cpp
lib/Sema/Sema.h
lib/Sema/SemaType.cpp

index 24c5e09f434b8250dc9a64a53107cf5b31d909d4..0d9ad12edab059d36909c95291df03c7a903e8ae 100644 (file)
@@ -19,6 +19,7 @@
 #include "clang/AST/DeclObjC.h"
 #include "clang/AST/Expr.h"
 #include "clang/Lex/Preprocessor.h"
+#include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Basic/TargetInfo.h"
 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) {
   Context.Comments.push_back(Comment);
 }
+
index 5b7a247e25a7b41f53ba07707f61882099afd1c0..324090556fcff888dd9f94a71ae6385879d8f1b3 100644 (file)
@@ -401,6 +401,9 @@ public:
     return SemaDiagnosticBuilder(DB, *this, DiagID);
   }
 
+  /// \brief Emit a partial diagnostic.
+  SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD);
+
   virtual void DeleteExpr(ExprTy *E);
   virtual void DeleteStmt(StmtTy *S);
 
@@ -484,7 +487,9 @@ public:
                               SourceRange Range1 = SourceRange(),
                               SourceRange Range2 = SourceRange(),
                               QualType PrintType = QualType());
-
+  bool RequireCompleteType(SourceLocation Loc, QualType T,
+                           const PartialDiagnostic &PD);
+  
   QualType getQualifiedNameType(const CXXScopeSpec &SS, QualType T);
 
   QualType BuildTypeofExprType(Expr *E);
index 49946ac1c367b1070eb056c9928451262164c1fd..7775c25142e88282b88c102bca5616199fcab50f 100644 (file)
@@ -18,6 +18,7 @@
 #include "clang/AST/DeclTemplate.h"
 #include "clang/AST/TypeLoc.h"
 #include "clang/AST/Expr.h"
+#include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Parse/DeclSpec.h"
 #include "llvm/ADT/SmallPtrSet.h"
 using namespace clang;
@@ -1772,6 +1773,18 @@ void Sema::ProcessTypeAttributeList(QualType &Result, const AttributeList *AL) {
 bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, unsigned diag,
                                SourceRange Range1, SourceRange Range2,
                                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
   // checking for dependent types and type-dependent expressions.
   //
@@ -1816,11 +1829,8 @@ bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, unsigned diag,
   if (diag == 0)
     return true;
   
-  if (PrintType.isNull())
-    PrintType = T;
-
   // 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
   // type, produce