diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-12-15 17:38:57 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-12-15 17:38:57 +0000 |
commit | c46333550f5787b6d48ca3043e14ba9594cb632d (patch) | |
tree | b079f451c808a1c1ef1e57054f9f5a2140e5b56a /lib/Sema/SemaTemplateVariadic.cpp | |
parent | 028d397c1b4082c88067efde740f1811fd557792 (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.cpp | 46 |
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; +} |