From 290a13e7c755e7e8d6be450efc63b8fcea417b86 Mon Sep 17 00:00:00 2001 From: Geoff Berry Date: Mon, 8 Aug 2016 18:27:22 +0000 Subject: [PATCH] [MemorySSA] Fix windows build breakage caused by r278028 r278028: [MemorySSA] Ensure address stability of MemorySSA object. llvm-svn: 278035 --- llvm/include/llvm/Transforms/Utils/MemorySSA.h | 9 ++++++++- llvm/lib/Transforms/Utils/MemorySSA.cpp | 8 ++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/Transforms/Utils/MemorySSA.h b/llvm/include/llvm/Transforms/Utils/MemorySSA.h index b356e8a..481ab18 100644 --- a/llvm/include/llvm/Transforms/Utils/MemorySSA.h +++ b/llvm/include/llvm/Transforms/Utils/MemorySSA.h @@ -675,7 +675,14 @@ class MemorySSAAnalysis : public AnalysisInfoMixin { static char PassID; public: - typedef std::unique_ptr Result; + // Wrap MemorySSA result to ensure address stability of internal MemorySSA + // pointers after construction. Use a wrapper class instead of plain + // unique_ptr to avoid build breakage on MSVC. + struct Result { + Result(std::unique_ptr &&MSSA) : MSSA(std::move(MSSA)) {} + MemorySSA &getMSSA() { return *MSSA.get(); } + std::unique_ptr MSSA; + }; Result run(Function &F, AnalysisManager &AM); }; diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index f349958..2e1ba59 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -2078,24 +2078,24 @@ bool MemorySSAPrinterLegacyPass::runOnFunction(Function &F) { char MemorySSAAnalysis::PassID; -std::unique_ptr +MemorySSAAnalysis::Result MemorySSAAnalysis::run(Function &F, AnalysisManager &AM) { auto &DT = AM.getResult(F); auto &AA = AM.getResult(F); - return make_unique(F, &AA, &DT); + return MemorySSAAnalysis::Result(make_unique(F, &AA, &DT)); } PreservedAnalyses MemorySSAPrinterPass::run(Function &F, FunctionAnalysisManager &AM) { OS << "MemorySSA for function: " << F.getName() << "\n"; - AM.getResult(F)->print(OS); + AM.getResult(F).getMSSA().print(OS); return PreservedAnalyses::all(); } PreservedAnalyses MemorySSAVerifierPass::run(Function &F, FunctionAnalysisManager &AM) { - AM.getResult(F)->verifyMemorySSA(); + AM.getResult(F).getMSSA().verifyMemorySSA(); return PreservedAnalyses::all(); } -- 2.7.4