From 4ec2e4c57896fa6e301f5f5a02669287c3116393 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Sun, 18 Jul 2004 00:01:50 +0000 Subject: [PATCH] bug 122: - Correct isa for GlobalValue subclass git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14933 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Value.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index a4f2669de01..d14d1656a47 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -15,6 +15,7 @@ #include "llvm/SymbolTable.h" #include "llvm/DerivedTypes.h" #include "llvm/Constant.h" +#include "llvm/GlobalValue.h" #include "Support/LeakDetector.h" #include #include @@ -71,7 +72,10 @@ void Value::uncheckedReplaceAllUsesWith(Value *New) { // Must handle Constants specially, we cannot call replaceUsesOfWith on a // constant! if (Constant *C = dyn_cast(U.getUser())) { - C->replaceUsesOfWithOnConstant(this, New, true); + if (!isa(C)) + C->replaceUsesOfWithOnConstant(this, New, true); + else + U.set(New); } else { U.set(New); } @@ -97,7 +101,7 @@ void Value::replaceAllUsesWith(Value *New) { void User::replaceUsesOfWith(Value *From, Value *To) { if (From == To) return; // Duh what? - assert(!isa(this) && + assert(!isa(this) || isa(this) && "Cannot call User::replaceUsesofWith on a constant!"); for (unsigned i = 0, E = getNumOperands(); i != E; ++i) @@ -108,3 +112,4 @@ void User::replaceUsesOfWith(Value *From, Value *To) { setOperand(i, To); // Fix it now... } } + -- 2.34.1