Disallow ArrayRef assignment from temporaries.
authorJordan Rose <jordan_rose@apple.com>
Mon, 10 Oct 2016 20:57:33 +0000 (20:57 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 10 Oct 2016 20:57:33 +0000 (20:57 +0000)
commitd77cee3f54bee1d32bd269827b27d889c8962db1
tree686aa21d241da1fb1f913e23679578856e4e7d2b
parentfcd2421667582cdceff8bf30d65b262998d3cd59
Disallow ArrayRef assignment from temporaries.

Without this, the following statements will create ArrayRefs that
refer to temporary storage that goes out of scope by the end of the
line:

  someArrayRef = getSingleElement();
  someArrayRef = {elem1, elem2};

Note that the constructor still has this problem:

  ArrayRef<Element> someArrayRef = getSingleElement();
  ArrayRef<Element> someArrayRef = {elem1, elem2};

but that's a little harder to get rid of because we want to be able to
use this in calls:

  takesArrayRef(getSingleElement());
  takesArrayRef({elem1, elem2});

Part of rdar://problem/16375365. Reviewed by Duncan Exon Smith.

llvm-svn: 283798
llvm/include/llvm/ADT/ArrayRef.h
llvm/unittests/ADT/ArrayRefTest.cpp