aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-01-31 17:18:49 +0000
committerAnders Carlsson <andersca@mac.com>2010-01-31 17:18:49 +0000
commit093802675b1548f2a5f44c29938d65cce00d58bb (patch)
tree5b08194bc73204dd9f30693750e457bf1e60aca4 /lib/Sema/SemaInit.cpp
parente1cd3374a8762d56c49d9abbc0c973a99e236422 (diff)
Diagnose binding a non-const reference to a vector element.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94963 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInit.cpp')
-rw-r--r--lib/Sema/SemaInit.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 5269167df2..a9adb70050 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -2341,7 +2341,7 @@ static void TryReferenceInitialization(Sema &S,
if (T1Quals != T2Quals)
Sequence.AddQualificationConversionStep(cv1T1, /*IsLValue=*/true);
bool BindingTemporary = T1Quals.hasConst() && !T1Quals.hasVolatile() &&
- Initializer->getBitField();
+ (Initializer->getBitField() || Initializer->refersToVectorElement());
Sequence.AddReferenceBindingStep(cv1T1, BindingTemporary);
return;
}
@@ -3284,6 +3284,14 @@ InitializationSequence::Perform(Sema &S,
return S.ExprError();
}
+ if (CurInitExpr->refersToVectorElement()) {
+ // Vector elements cannot bind to bit fields.
+ S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element)
+ << Entity.getType().isVolatileQualified()
+ << CurInitExpr->getSourceRange();
+ return S.ExprError();
+ }
+
// Reference binding does not have any corresponding ASTs.
// Check exception specifications