[clang-tools-extra] r323859 - [clangd] Attempt to fix compilation breakage with MSVC.

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 31 01:50:21 PST 2018


Author: ibiryukov
Date: Wed Jan 31 01:50:21 2018
New Revision: 323859

URL: http://llvm.org/viewvc/llvm-project?rev=323859&view=rev
Log:
[clangd] Attempt to fix compilation breakage with MSVC.

Modified:
    clang-tools-extra/trunk/clangd/ClangdServer.cpp

Modified: clang-tools-extra/trunk/clangd/ClangdServer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdServer.cpp?rev=323859&r1=323858&r2=323859&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/ClangdServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdServer.cpp Wed Jan 31 01:50:21 2018
@@ -34,21 +34,25 @@ namespace {
 // Issues an async read of AST and waits for results.
 template <class Ret, class Func>
 Ret blockingRunWithAST(TUScheduler &S, PathRef File, Func &&F) {
-  std::packaged_task<Ret(llvm::Expected<InputsAndAST>)> Task(
+  // Using Optional to workaround MSVC bug. It requires future<> arguments to
+  // have default ctor.
+  std::packaged_task<llvm::Optional<Ret>(llvm::Expected<InputsAndAST>)> Task(
       std::forward<Func>(F));
   auto Future = Task.get_future();
   S.runWithAST(File, std::move(Task));
-  return Future.get();
+  return *Future.get();
 }
 
 // Issues an async read of preamble and waits for results.
 template <class Ret, class Func>
 Ret blockingRunWithPreamble(TUScheduler &S, PathRef File, Func &&F) {
-  std::packaged_task<Ret(llvm::Expected<InputsAndPreamble>)> Task(
-      std::forward<Func>(F));
+  // Using Optional to workaround MSVC bug. It requires future<> arguments to
+  // have default ctor.
+  std::packaged_task<llvm::Optional<Ret>(llvm::Expected<InputsAndPreamble>)>
+      Task(std::forward<Func>(F));
   auto Future = Task.get_future();
   S.runWithPreamble(File, std::move(Task));
-  return Future.get();
+  return *Future.get();
 }
 
 void ignoreError(llvm::Error Err) {




More information about the cfe-commits mailing list