diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index 93207cc..6791f57 100644
--- a/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -194,7 +194,7 @@
     // an old-style (llvmgcc3) static ctor with __main linked in and in use.  If
     // this is the case, don't execute any of the global ctors, __main will do
     // it.
-    if (!GV || GV->isExternal() || GV->hasInternalLinkage()) continue;
+    if (!GV || GV->isDeclaration() || GV->hasInternalLinkage()) continue;
   
     // Should be an array of '{ int, void ()* }' structs.  The first value is
     // the init priority, which we ignore.
@@ -746,7 +746,7 @@
       for (Module::const_global_iterator I = M.global_begin(),
            E = M.global_end(); I != E; ++I) {
         const GlobalValue *GV = I;
-        if (GV->hasInternalLinkage() || GV->isExternal() ||
+        if (GV->hasInternalLinkage() || GV->isDeclaration() ||
             GV->hasAppendingLinkage() || !GV->hasName())
           continue;// Ignore external globals and globals with internal linkage.
           
@@ -791,7 +791,7 @@
         }
       }
       
-      if (!I->isExternal()) {
+      if (!I->isDeclaration()) {
         // Get the type of the global.
         const Type *Ty = I->getType()->getElementType();
 
@@ -829,7 +829,7 @@
     // and initialize their contents.
     for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
          I != E; ++I) {
-      if (!I->isExternal()) {
+      if (!I->isDeclaration()) {
         if (!LinkedGlobalsMap.empty()) {
           if (const GlobalValue *GVEntry = 
                 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())])
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index 2ddfc97..2e36875 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -1137,7 +1137,7 @@
 
   // Check to see if this is an intrinsic function call...
   if (Function *F = CS.getCalledFunction())
-   if (F->isExternal ())
+   if (F->isDeclaration ())
     switch (F->getIntrinsicID()) {
     case Intrinsic::not_intrinsic:
       break;
@@ -1726,7 +1726,7 @@
   StackFrame.CurFunction = F;
 
   // Special handling for external functions.
-  if (F->isExternal()) {
+  if (F->isDeclaration()) {
     GenericValue Result = callExternalFunction (F, ArgVals);
     // Simulate a 'ret' instruction of the appropriate type.
     popStackAndReturnValueToCaller (F->getReturnType (), Result);
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index c88e393..eabe4ea 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -291,7 +291,7 @@
     }
   }
 
-  if (F->isExternal()) {
+  if (F->isDeclaration()) {
     void *Addr = getPointerToNamedFunction(F->getName());
     addGlobalMapping(F, Addr);
     return Addr;
@@ -314,7 +314,7 @@
   if (Ptr) return Ptr;
 
   // If the global is external, just remember the address.
-  if (GV->isExternal()) {
+  if (GV->isDeclaration()) {
 #if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_4) && \
     ((MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4) || \
      (MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4 && \
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp
index 4c3b9fd..08fd58c 100644
--- a/lib/ExecutionEngine/JIT/JITEmitter.cpp
+++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp
@@ -543,7 +543,7 @@
   // Call the lazy resolver function unless we already KNOW it is an external
   // function, in which case we just skip the lazy resolution step.
   void *Actual = (void*)(intptr_t)LazyResolverFn;
-  if (F->isExternal() && !F->hasNotBeenReadFromBytecode())
+  if (F->isDeclaration() && !F->hasNotBeenReadFromBytecode())
     Actual = TheJIT->getPointerToFunction(F);
 
   // Otherwise, codegen a new stub.  For now, the stub will call the lazy
@@ -746,7 +746,7 @@
   void *ResultPtr = TheJIT->getPointerToGlobalIfAvailable(F);
   if (ResultPtr) return ResultPtr;
 
-  if (F->isExternal() && !F->hasNotBeenReadFromBytecode()) {
+  if (F->isDeclaration() && !F->hasNotBeenReadFromBytecode()) {
     // If this is an external function pointer, we can force the JIT to
     // 'compile' it, which really just adds it to the map.
     if (DoesntNeedStub)
