<div dir="ltr">This is another example where I think LLVM_NODISCARD is inappropriate.  Just because a function returns an ArrayRef doesn't mean I need to check its value.  I have not undone this change yet since it was not blocking anything, but I found this after the fact.  I think we should go back to putting it on the individual members here.</div><br><div class="gmail_quote"><div dir="ltr">On Sun, Oct 16, 2016 at 1:39 PM Justin Bogner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: bogner<br class="gmail_msg">
Date: Sun Oct 16 15:30:40 2016<br class="gmail_msg">
New Revision: 284342<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=284342&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=284342&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
ADT: Use LLVM_NODISCARD instead of LLVM_ATTRIBUTE_UNUSED_RESULT for ArrayRef<br class="gmail_msg">
<br class="gmail_msg">
Instead of annotating (most of) the ArrayRef API, we can just annotate<br class="gmail_msg">
the type directly. This is less code and it will warn in more cases.<br class="gmail_msg">
<br class="gmail_msg">
Modified:<br class="gmail_msg">
    llvm/trunk/include/llvm/ADT/ArrayRef.h<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/include/llvm/ADT/ArrayRef.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ArrayRef.h?rev=284342&r1=284341&r2=284342&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ArrayRef.h?rev=284342&r1=284341&r2=284342&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/include/llvm/ADT/ArrayRef.h (original)<br class="gmail_msg">
+++ llvm/trunk/include/llvm/ADT/ArrayRef.h Sun Oct 16 15:30:40 2016<br class="gmail_msg">
@@ -29,7 +29,7 @@ namespace llvm {<br class="gmail_msg">
   /// This is intended to be trivially copyable, so it should be passed by<br class="gmail_msg">
   /// value.<br class="gmail_msg">
   template<typename T><br class="gmail_msg">
-  class ArrayRef {<br class="gmail_msg">
+  class LLVM_NODISCARD ArrayRef {<br class="gmail_msg">
   public:<br class="gmail_msg">
     typedef const T *iterator;<br class="gmail_msg">
     typedef const T *const_iterator;<br class="gmail_msg">
@@ -167,7 +167,6 @@ namespace llvm {<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// slice(n) - Chop off the first N elements of the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> slice(size_t N) const {<br class="gmail_msg">
       assert(N <= size() && "Invalid specifier");<br class="gmail_msg">
       return ArrayRef<T>(data()+N, size()-N);<br class="gmail_msg">
@@ -175,28 +174,24 @@ namespace llvm {<br class="gmail_msg">
<br class="gmail_msg">
     /// slice(n, m) - Chop off the first N elements of the array, and keep M<br class="gmail_msg">
     /// elements in the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> slice(size_t N, size_t M) const {<br class="gmail_msg">
       assert(N+M <= size() && "Invalid specifier");<br class="gmail_msg">
       return ArrayRef<T>(data()+N, M);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Drop the first \p N elements of the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> drop_front(size_t N = 1) const {<br class="gmail_msg">
       assert(size() >= N && "Dropping more elements than exist");<br class="gmail_msg">
       return slice(N, size() - N);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Drop the last \p N elements of the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> drop_back(size_t N = 1) const {<br class="gmail_msg">
       assert(size() >= N && "Dropping more elements than exist");<br class="gmail_msg">
       return slice(0, size() - N);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Return a copy of *this with only the first \p N elements.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> take_front(size_t N = 1) const {<br class="gmail_msg">
       if (N >= size())<br class="gmail_msg">
         return *this;<br class="gmail_msg">
@@ -204,7 +199,6 @@ namespace llvm {<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Return a copy of *this with only the last \p N elements.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     ArrayRef<T> take_back(size_t N = 1) const {<br class="gmail_msg">
       if (N >= size())<br class="gmail_msg">
         return *this;<br class="gmail_msg">
@@ -265,7 +259,7 @@ namespace llvm {<br class="gmail_msg">
   /// This is intended to be trivially copyable, so it should be passed by<br class="gmail_msg">
   /// value.<br class="gmail_msg">
   template<typename T><br class="gmail_msg">
-  class MutableArrayRef : public ArrayRef<T> {<br class="gmail_msg">
+  class LLVM_NODISCARD MutableArrayRef : public ArrayRef<T> {<br class="gmail_msg">
   public:<br class="gmail_msg">
     typedef T *iterator;<br class="gmail_msg">
<br class="gmail_msg">
@@ -326,7 +320,6 @@ namespace llvm {<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// slice(n) - Chop off the first N elements of the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> slice(size_t N) const {<br class="gmail_msg">
       assert(N <= this->size() && "Invalid specifier");<br class="gmail_msg">
       return MutableArrayRef<T>(data()+N, this->size()-N);<br class="gmail_msg">
@@ -334,27 +327,23 @@ namespace llvm {<br class="gmail_msg">
<br class="gmail_msg">
     /// slice(n, m) - Chop off the first N elements of the array, and keep M<br class="gmail_msg">
     /// elements in the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> slice(size_t N, size_t M) const {<br class="gmail_msg">
       assert(N+M <= this->size() && "Invalid specifier");<br class="gmail_msg">
       return MutableArrayRef<T>(data()+N, M);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Drop the first \p N elements of the array.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> drop_front(size_t N = 1) const {<br class="gmail_msg">
       assert(this->size() >= N && "Dropping more elements than exist");<br class="gmail_msg">
       return slice(N, this->size() - N);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> drop_back(size_t N = 1) const {<br class="gmail_msg">
       assert(this->size() >= N && "Dropping more elements than exist");<br class="gmail_msg">
       return slice(0, this->size() - N);<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Return a copy of *this with only the first \p N elements.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> take_front(size_t N = 1) const {<br class="gmail_msg">
       if (N >= this->size())<br class="gmail_msg">
         return *this;<br class="gmail_msg">
@@ -362,7 +351,6 @@ namespace llvm {<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
     /// \brief Return a copy of *this with only the last \p N elements.<br class="gmail_msg">
-    LLVM_ATTRIBUTE_UNUSED_RESULT<br class="gmail_msg">
     MutableArrayRef<T> take_back(size_t N = 1) const {<br class="gmail_msg">
       if (N >= this->size())<br class="gmail_msg">
         return *this;<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div>