summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Wilson <nwilson20@gmail.com>2016-02-08 22:02:50 +0000
committerNathan Wilson <nwilson20@gmail.com>2016-02-08 22:02:50 +0000
commit06dacd851fe4df04d9ad321950755f7d1ed0c6e5 (patch)
tree7a1d979a184e5659b3bf91bf20bc2001f21f8083
parent740f2ca6725d16612ab4c108cddb850aaf0bcc1b (diff)
downloadbcm5719-llvm-06dacd851fe4df04d9ad321950755f7d1ed0c6e5.tar.gz
bcm5719-llvm-06dacd851fe4df04d9ad321950755f7d1ed0c6e5.zip
[Concepts] Remove the IsConcept bit and associated member functions from VarDecl
because the information is now stored in TemplateDecl. llvm-svn: 260155
-rw-r--r--clang/include/clang/AST/Decl.h12
-rw-r--r--clang/lib/Sema/SemaDecl.cpp13
2 files changed, 8 insertions, 17 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h
index 29b19f2d8e3..a545e218143 100644
--- a/clang/include/clang/AST/Decl.h
+++ b/clang/include/clang/AST/Decl.h
@@ -816,9 +816,6 @@ protected:
/// \brief Whether this variable is (C++0x) constexpr.
unsigned IsConstexpr : 1;
- /// \brief Whether this variable is a (C++ Concepts TS) concept.
- unsigned IsConcept : 1;
-
/// \brief Whether this variable is the implicit variable for a lambda
/// init-capture.
unsigned IsInitCapture : 1;
@@ -1194,15 +1191,6 @@ public:
NonParmVarDeclBits.IsConstexpr = IC;
}
- /// Whether this variable is (C++ Concepts TS) concept.
- bool isConcept() const {
- return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.IsConcept;
- }
- void setConcept(bool IC) {
- assert(!isa<ParmVarDecl>(this));
- NonParmVarDeclBits.IsConcept = IC;
- }
-
/// Whether this variable is the implicit variable for a lambda init-capture.
bool isInitCapture() const {
return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.IsInitCapture;
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index c908f672a4f..754536e629f 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -5983,7 +5983,8 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
NewVD->setConstexpr(true);
if (D.getDeclSpec().isConceptSpecified()) {
- NewVD->setConcept(true);
+ if (VarTemplateDecl *VTD = NewVD->getDescribedVarTemplate())
+ VTD->setConcept();
// C++ Concepts TS [dcl.spec.concept]p2: A concept definition shall not
// be declared with the thread_local, inline, friend, or constexpr
@@ -9760,10 +9761,12 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl,
// C++ Concepts TS [dcl.spec.concept]p1: [...] A variable template
// definition having the concept specifier is called a variable concept. A
// concept definition refers to [...] a variable concept and its initializer.
- if (Var->isConcept()) {
- Diag(Var->getLocation(), diag::err_var_concept_not_initialized);
- Var->setInvalidDecl();
- return;
+ if (VarTemplateDecl *VTD = Var->getDescribedVarTemplate()) {
+ if (VTD->isConcept()) {
+ Diag(Var->getLocation(), diag::err_var_concept_not_initialized);
+ Var->setInvalidDecl();
+ return;
+ }
}
// OpenCL v1.1 s6.5.3: variables declared in the constant address space must
OpenPOWER on IntegriCloud