From 28b45aa83e22776253cfe6f10f532ad7d185e3d0 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 19 Nov 2014 01:02:22 +0000 Subject: [PATCH] Use a memcpy so that type based alias analysis sees the change. The other option would be to do something like if (that.isSingleWord()) VAL = that.VAL; else pVal = that.pVal This bug was causing 86TTI::getIntImmCost to be miscompiled in a LTO bootstrap in stage2, causing the build of stage3 to fail. LLVM is getting quiet good at exploiting this. Not sure if there is anything a sanitizer could do to help git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222294 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/APInt.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index 4d19bab13f4..f4e7e3c6356 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -665,7 +665,9 @@ public: delete[] pVal; } - VAL = that.VAL; + // Use memcpy so that type based alias analysis sees both VAL and pVal + // as modified. + memcpy(&VAL, &that.VAL, sizeof(uint64_t)); // If 'this == &that', avoid zeroing our own bitwidth by storing to 'that' // first. -- 2.34.1