]> granicus.if.org Git - llvm/commitdiff
[dsymutil] Fix stack-use-after-scope
authorJonas Devlieghere <jonas@devlieghere.com>
Fri, 4 Oct 2019 00:39:48 +0000 (00:39 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Fri, 4 Oct 2019 00:39:48 +0000 (00:39 +0000)
The lambda is taking the stack-allocated Verify boolean by reference and
it would go out of scope on the next iteration. Moving it out of the
loop should fix the issue.

Fixes https://bugs.llvm.org/show_bug.cgi?id=43549

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373683 91177308-0d34-0410-b5e6-96231b3b80d8

tools/dsymutil/dsymutil.cpp

index fe69abed0a82ba1242df5453c82c2a889a6b433b..983e86808e7e41207ba1fad2fd7abcdf02b01c31 100644 (file)
@@ -520,9 +520,10 @@ int main(int argc, char **argv) {
 
     // If there is more than one link to execute, we need to generate
     // temporary files.
-    bool NeedsTempFiles =
+    const bool NeedsTempFiles =
         !Options.DumpDebugMap && (Options.OutputFile != "-") &&
         (DebugMapPtrsOrErr->size() != 1 || Options.LinkOpts.Update);
+    const bool Verify = Options.Verify && !Options.LinkOpts.NoOutput;
 
     SmallVector<MachOUtils::ArchAndFile, 4> TempFiles;
     std::atomic_char AllOK(1);
@@ -577,7 +578,6 @@ int main(int argc, char **argv) {
         }
       }
 
-      const bool Verify = Options.Verify && !Options.LinkOpts.NoOutput;
       auto LinkLambda = [&, OutputFile](std::shared_ptr<raw_fd_ostream> Stream,
                                         LinkOptions Options) {
         AllOK.fetch_and(