From 5b3275e56f3c8e1b3cbc15f3866d903b9275c132 Mon Sep 17 00:00:00 2001 From: Matthias Gehre Date: Mon, 19 Aug 2019 21:59:44 +0000 Subject: [PATCH] [ORC] fix use-after-free detected by -Wreturn-stack-address Summary: llvm/lib/ExecutionEngine/Orc/Layer.cpp:53:12: warning: returning address of local temporary object [-Wreturn-stack-address] In ``` StringRef IRMaterializationUnit::getName() const { [...] return TSM.withModuleDo( [](const Module &M) { return M.getModuleIdentifier(); }); ``` `getModuleIdentifier()` returns a `const std::string &`, but the implicit return type of the lambda is `std::string` by value, and thus the returned `StringRef` refers to a temporary `std::string`. Detect by annotating `llvm::StringRef` with `[[gsl::Pointer]]`. Reviewers: lhames, sgraenitz Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66440 llvm-svn: 369306 --- llvm/lib/ExecutionEngine/Orc/Layer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp index ba2ec32..580e268 100644 --- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp @@ -51,7 +51,7 @@ IRMaterializationUnit::IRMaterializationUnit( StringRef IRMaterializationUnit::getName() const { if (TSM) return TSM.withModuleDo( - [](const Module &M) { return M.getModuleIdentifier(); }); + [](const Module &M) -> StringRef { return M.getModuleIdentifier(); }); return ""; } -- 2.7.4