<div dir="ltr">Seems like a losing race to try to flag every API surface area that might have this problem.<br><br>Is it worth considering a clang-tidy or full clang warning for cases like this? (& could diagnose the usage directly)</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 8, 2019 at 11:59 AM Jordan Rose 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: jrose<br>
Date: Tue Oct  8 12:01:48 2019<br>
New Revision: 374102<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=374102&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=374102&view=rev</a><br>
Log:<br>
Mark several PointerIntPair methods as lvalue-only<br>
<br>
No point in mutating 'this' if it's just going to be thrown away.<br>
<br>
<a href="https://reviews.llvm.org/D63945" rel="noreferrer" target="_blank">https://reviews.llvm.org/D63945</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/ADT/PointerIntPair.h<br>
<br>
Modified: llvm/trunk/include/llvm/ADT/PointerIntPair.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/PointerIntPair.h?rev=374102&r1=374101&r2=374102&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/PointerIntPair.h?rev=374102&r1=374101&r2=374102&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/ADT/PointerIntPair.h (original)<br>
+++ llvm/trunk/include/llvm/ADT/PointerIntPair.h Tue Oct  8 12:01:48 2019<br>
@@ -13,6 +13,7 @@<br>
 #ifndef LLVM_ADT_POINTERINTPAIR_H<br>
 #define LLVM_ADT_POINTERINTPAIR_H<br>
<br>
+#include "llvm/Support/Compiler.h"<br>
 #include "llvm/Support/PointerLikeTypeTraits.h"<br>
 #include "llvm/Support/type_traits.h"<br>
 #include <cassert><br>
@@ -59,19 +60,19 @@ public:<br>
<br>
   IntType getInt() const { return (IntType)Info::getInt(Value); }<br>
<br>
-  void setPointer(PointerTy PtrVal) {<br>
+  void setPointer(PointerTy PtrVal) LLVM_LVALUE_FUNCTION {<br>
     Value = Info::updatePointer(Value, PtrVal);<br>
   }<br>
<br>
-  void setInt(IntType IntVal) {<br>
+  void setInt(IntType IntVal) LLVM_LVALUE_FUNCTION {<br>
     Value = Info::updateInt(Value, static_cast<intptr_t>(IntVal));<br>
   }<br>
<br>
-  void initWithPointer(PointerTy PtrVal) {<br>
+  void initWithPointer(PointerTy PtrVal) LLVM_LVALUE_FUNCTION {<br>
     Value = Info::updatePointer(0, PtrVal);<br>
   }<br>
<br>
-  void setPointerAndInt(PointerTy PtrVal, IntType IntVal) {<br>
+  void setPointerAndInt(PointerTy PtrVal, IntType IntVal) LLVM_LVALUE_FUNCTION {<br>
     Value = Info::updateInt(Info::updatePointer(0, PtrVal),<br>
                             static_cast<intptr_t>(IntVal));<br>
   }<br>
@@ -89,7 +90,7 @@ public:<br>
<br>
   void *getOpaqueValue() const { return reinterpret_cast<void *>(Value); }<br>
<br>
-  void setFromOpaqueValue(void *Val) {<br>
+  void setFromOpaqueValue(void *Val) LLVM_LVALUE_FUNCTION {<br>
     Value = reinterpret_cast<intptr_t>(Val);<br>
   }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>