diff options
author | Anders Carlsson <andersca@mac.com> | 2010-01-31 17:18:49 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-01-31 17:18:49 +0000 |
commit | 093802675b1548f2a5f44c29938d65cce00d58bb (patch) | |
tree | 5b08194bc73204dd9f30693750e457bf1e60aca4 /lib/Sema/SemaInit.cpp | |
parent | e1cd3374a8762d56c49d9abbc0c973a99e236422 (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.cpp | 10 |
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 |