[clang] [APINotes] Refactor APINotesReader to propagate llvm::Error (PR #183812)

Maria Fernanda GuimarĂ£es via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 2 04:54:17 PST 2026


================
@@ -98,8 +98,11 @@ APINotesManager::loadAPINotes(FileEntryRef APINotesFile) {
 
   // Load the binary form we just compiled.
   auto Reader = APINotesReader::Create(std::move(CompiledBuffer), SwiftVersion);
-  assert(Reader && "Could not load the API notes we just generated?");
-  return Reader;
+  if (!Reader) {
+    llvm::consumeError(Reader.takeError());
+    return nullptr;
+  }
+  return std::move(Reader.get());
----------------
mafeguimaraes wrote:

Hi @Xazax-hun, 

I actually tried removing it, but it turns out the `std::move` is required here.

Since `Reader` is an `llvm::Expected<std::unique_ptr<APINotesReader>>`, `Reader.get()` returns a reference to the underlying `unique_ptr`. Because we are returning it by value from the function and `unique_ptr` cannot be copied, we have to explicitly use `std::move()` to transfer ownership out of the `Expected` wrapper.

I've kept the `std::move` in `APINotesManager.cpp`, but I removed the redundant ones in `APINotesReader.cpp` as well as the stray semicolon you pointed out.

Pushed the updates! Thanks for the review!

https://github.com/llvm/llvm-project/pull/183812


More information about the cfe-commits mailing list