[PATCH] Fix unresolved linker symbols from misplaced extern definitions

Chuck Atkins via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 9 08:02:39 PDT 2016


When LCSSAID and LoopSimplifyID are declared extern inside a function body,
some linkers will fail to resolve the actual symbnols defined in the llvm
namespace.  By removing the function local extern deeclaratiuons and relying
on the header definitions in Scalar.h, the symbols can be properly reolved.
This is specifically an issue when building with the Intel compiler.
---
 lib/Transforms/Utils/LoopUtils.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/Transforms/Utils/LoopUtils.cpp b/lib/Transforms/Utils/LoopUtils.cpp
index 8878689..9a7813f 100644
--- a/lib/Transforms/Utils/LoopUtils.cpp
+++ b/lib/Transforms/Utils/LoopUtils.cpp
@@ -11,6 +11,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/Transforms/Scalar.h"
 #include "llvm/Transforms/Utils/LoopUtils.h"
 #include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/Analysis/BasicAliasAnalysis.h"
@@ -940,8 +941,6 @@ void llvm::getLoopAnalysisUsage(AnalysisUsage &AU) {
 
   // We must also preserve LoopSimplify and LCSSA. We locally access their IDs
   // here because users shouldn't directly get them from this header.
-  extern char &LoopSimplifyID;
-  extern char &LCSSAID;
   AU.addRequiredID(LoopSimplifyID);
   AU.addPreservedID(LoopSimplifyID);
   AU.addRequiredID(LCSSAID);
-- 
2.7.4



More information about the llvm-commits mailing list