aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaTemplateVariadic.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-12-15 17:38:57 +0000
committerDouglas Gregor <dgregor@apple.com>2010-12-15 17:38:57 +0000
commitc46333550f5787b6d48ca3043e14ba9594cb632d (patch)
treeb079f451c808a1c1ef1e57054f9f5a2140e5b56a /lib/Sema/SemaTemplateVariadic.cpp
parent028d397c1b4082c88067efde740f1811fd557792 (diff)
Move the work-in-progress implementation of variadic templates to its own file in Sema. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121869 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateVariadic.cpp')
-rw-r--r--lib/Sema/SemaTemplateVariadic.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/Sema/SemaTemplateVariadic.cpp b/lib/Sema/SemaTemplateVariadic.cpp
new file mode 100644
index 0000000000..42b868f574
--- /dev/null
+++ b/lib/Sema/SemaTemplateVariadic.cpp
@@ -0,0 +1,46 @@
+//===------- SemaTemplateVariadic.cpp - C++ Variadic Templates ------------===/
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//===----------------------------------------------------------------------===/
+//
+// This file implements semantic analysis for C++0x variadic templates.
+//===----------------------------------------------------------------------===/
+
+#include "clang/Sema/Sema.h"
+#include "clang/Sema/SemaInternal.h"
+#include "clang/AST/Expr.h"
+#include "clang/AST/TypeLoc.h"
+
+using namespace clang;
+
+bool Sema::DiagnoseUnexpandedParameterPack(SourceLocation Loc,
+ TypeSourceInfo *T,
+ UnexpandedParameterPackContext UPPC) {
+ // C++0x [temp.variadic]p5:
+ // An appearance of a name of a parameter pack that is not expanded is
+ // ill-formed.
+ if (!T->getType()->containsUnexpandedParameterPack())
+ return false;
+
+ // FIXME: Provide the names and locations of the unexpanded parameter packs.
+ Diag(Loc, diag::err_unexpanded_parameter_pack)
+ << (int)UPPC << T->getTypeLoc().getSourceRange();
+ return true;
+}
+
+bool Sema::DiagnoseUnexpandedParameterPack(Expr *E,
+ UnexpandedParameterPackContext UPPC) {
+ // C++0x [temp.variadic]p5:
+ // An appearance of a name of a parameter pack that is not expanded is
+ // ill-formed.
+ if (!E->containsUnexpandedParameterPack())
+ return false;
+
+ // FIXME: Provide the names and locations of the unexpanded parameter packs.
+ Diag(E->getSourceRange().getBegin(), diag::err_unexpanded_parameter_pack)
+ << (int)UPPC << E->getSourceRange();
+ return true;
+}