[llvm] r283803 - Revert "Disallow ArrayRef assignment from temporaries."
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 10 14:36:23 PDT 2016
Author: zturner
Date: Mon Oct 10 16:36:23 2016
New Revision: 283803
URL: http://llvm.org/viewvc/llvm-project?rev=283803&view=rev
Log:
Revert "Disallow ArrayRef assignment from temporaries."
This reverts commit r283798, as it causes static asserts on
MSVC 2015 with the following errors:
ArrayRefTest.cpp(38): error C2338: Assigning from single prvalue element
ArrayRefTest.cpp(41): error C2338: Assigning from single xvalue element
ArrayRefTest.cpp(47): error C2338: Assigning from an initializer list
Modified:
llvm/trunk/include/llvm/ADT/ArrayRef.h
llvm/trunk/unittests/ADT/ArrayRefTest.cpp
Modified: llvm/trunk/include/llvm/ADT/ArrayRef.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ArrayRef.h?rev=283803&r1=283802&r2=283803&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/ArrayRef.h (original)
+++ llvm/trunk/include/llvm/ADT/ArrayRef.h Mon Oct 10 16:36:23 2016
@@ -219,22 +219,6 @@ namespace llvm {
return Data[Index];
}
- /// Disallow accidental assignment from a temporary.
- ///
- /// The declaration here is extra complicated so that "arrayRef = {}"
- /// continues to select the move assignment operator.
- template <typename U>
- typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type &
- operator=(U &&Temporary) = delete;
-
- /// Disallow accidental assignment from a temporary.
- ///
- /// The declaration here is extra complicated so that "arrayRef = {}"
- /// continues to select the move assignment operator.
- template <typename U>
- typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type &
- operator=(std::initializer_list<U>) = delete;
-
/// @}
/// @name Expensive Operations
/// @{
Modified: llvm/trunk/unittests/ADT/ArrayRefTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/ArrayRefTest.cpp?rev=283803&r1=283802&r2=283803&view=diff
==============================================================================
--- llvm/trunk/unittests/ADT/ArrayRefTest.cpp (original)
+++ llvm/trunk/unittests/ADT/ArrayRefTest.cpp Mon Oct 10 16:36:23 2016
@@ -31,21 +31,6 @@ static_assert(
!std::is_convertible<ArrayRef<volatile int *>, ArrayRef<int *>>::value,
"Removing volatile");
-// Check that we can't accidentally assign a temporary location to an ArrayRef.
-// (Unfortunately we can't make use of the same thing with constructors.)
-static_assert(
- !std::is_assignable<ArrayRef<int *>, int *>::value,
- "Assigning from single prvalue element");
-static_assert(
- !std::is_assignable<ArrayRef<int *>, int * &&>::value,
- "Assigning from single xvalue element");
-static_assert(
- std::is_assignable<ArrayRef<int *>, int * &>::value,
- "Assigning from single lvalue element");
-static_assert(
- !std::is_assignable<ArrayRef<int *>, std::initializer_list<int *>>::value,
- "Assigning from an initializer list");
-
namespace {
TEST(ArrayRefTest, AllocatorCopy) {
@@ -176,14 +161,6 @@ TEST(ArrayRefTest, InitializerList) {
ArgTest12({1, 2});
}
-TEST(ArrayRefTest, EmptyInitializerList) {
- ArrayRef<int> A = {};
- EXPECT_TRUE(A.empty());
-
- A = {};
- EXPECT_TRUE(A.empty());
-}
-
// Test that makeArrayRef works on ArrayRef (no-op)
TEST(ArrayRefTest, makeArrayRef) {
static const int A1[] = {1, 2, 3, 4, 5, 6, 7, 8};
More information about the llvm-commits
mailing list