aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore/Use.cpp
diff options
context:
space:
mode:
authorGabor Greif <ggreif@gmail.com>2008-10-16 15:33:02 +0000
committerGabor Greif <ggreif@gmail.com>2008-10-16 15:33:02 +0000
commit023f84ecafa08a67101937ac80f0dfd9f5e69dfb (patch)
tree8831767019372b83349c401cfe91078e1b4b12d6 /lib/VMCore/Use.cpp
parentcc30d9caa5d4a7b7f08c33915d8c2f438a1d8c2b (diff)
downloadexternal_llvm-023f84ecafa08a67101937ac80f0dfd9f5e69dfb.zip
external_llvm-023f84ecafa08a67101937ac80f0dfd9f5e69dfb.tar.gz
external_llvm-023f84ecafa08a67101937ac80f0dfd9f5e69dfb.tar.bz2
Introduce a typing refinenement on tagged data
using the 'volatile' qualifier. This should not have any operational consequences on code, because tags should always be stripped off (giving a non-volatile pointer) before dereferencing. The new qualification is there to catch some attempts to use tagged pointers in a context where an untagged pointer is appropriate. Notably this approach does not catch dereferencing of tagged pointers, but helps in separating the two concepts a bit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57641 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Use.cpp')
-rw-r--r--lib/VMCore/Use.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/lib/VMCore/Use.cpp b/lib/VMCore/Use.cpp
index d96a0e5..5eadaad 100644
--- a/lib/VMCore/Use.cpp
+++ b/lib/VMCore/Use.cpp
@@ -127,7 +127,7 @@ void Use::zap(Use *Start, const Use *Stop, bool del) {
//===----------------------------------------------------------------------===//
struct AugmentedUse : Use {
- User *ref;
+ volatile User *ref;
AugmentedUse(); // not implemented
};
@@ -138,12 +138,10 @@ struct AugmentedUse : Use {
User *Use::getUser() const {
const Use *End = getImpliedUser();
- User *She = static_cast<const AugmentedUse*>(End - 1)->ref;
- She = extractTag<Tag, tagOne>(She)
+ volatile User *She = static_cast<const AugmentedUse*>(End - 1)->ref;
+ return extractTag<Tag, tagOne>(She)
? llvm::stripTag<tagOne>(She)
: reinterpret_cast<User*>(const_cast<Use*>(End));
-
- return She;
}
//===----------------------------------------------------------------------===//