[optional] dereference after std::move instead of before.

This is the correct way to move a value out of an optional.

Tested: runtests
Change-Id: I3c0b24eb85f5be0cc91a3fbebc145860ef1b854a
diff --git a/system/dev/audio/astro-pdm-input/audio-stream-in.cpp b/system/dev/audio/astro-pdm-input/audio-stream-in.cpp
index 60b732b..8b8b767 100644
--- a/system/dev/audio/astro-pdm-input/audio-stream-in.cpp
+++ b/system/dev/audio/astro-pdm-input/audio-stream-in.cpp
@@ -79,8 +79,8 @@
         return status;
     }
 
-    pdm_ = AmlPdmDevice::Create(std::move(*mmio0),
-                                std::move(*mmio1),
+    pdm_ = AmlPdmDevice::Create(*std::move(mmio0),
+                                *std::move(mmio1),
                                 HIFI_PLL, 7, 499, TODDR_B);
     if (pdm_ == nullptr) {
         zxlogf(ERROR, "%s failed to create pdm device\n", __func__);
diff --git a/system/dev/audio/astro-tdm-output/audio-stream-out.cpp b/system/dev/audio/astro-tdm-output/audio-stream-out.cpp
index 3620891..4feafb2 100644
--- a/system/dev/audio/astro-tdm-output/audio-stream-out.cpp
+++ b/system/dev/audio/astro-tdm-output/audio-stream-out.cpp
@@ -40,7 +40,7 @@
         zxlogf(ERROR, "%s failed to allocate i2c\n", __func__);
         return ZX_ERR_NO_RESOURCES;
     }
-    codec_ = Tas27xx::Create(std::move(*i2c));
+    codec_ = Tas27xx::Create(*std::move(i2c));
     if (!codec_) {
         zxlogf(ERROR, "%s could not get tas27xx\n", __func__);
         return ZX_ERR_NO_RESOURCES;
@@ -57,7 +57,7 @@
     if (status != ZX_OK) {
         return status;
     }
-    aml_audio_ = AmlTdmDevice::Create(std::move(*mmio),
+    aml_audio_ = AmlTdmDevice::Create(*std::move(mmio),
                                       HIFI_PLL, TDM_OUT_B, FRDDR_B, MCLK_A);
     if (aml_audio_ == nullptr) {
         zxlogf(ERROR, "%s failed to create tdm device\n", __func__);
diff --git a/system/dev/audio/mt8167-tdm-input/audio-stream-in.cpp b/system/dev/audio/mt8167-tdm-input/audio-stream-in.cpp
index c067f46..874d266 100644
--- a/system/dev/audio/mt8167-tdm-input/audio-stream-in.cpp
+++ b/system/dev/audio/mt8167-tdm-input/audio-stream-in.cpp
@@ -103,7 +103,7 @@
         return status;
     }
 
-    mt_audio_ = MtAudioInDevice::Create(std::move(*mmio_audio), MtAudioInDevice::I2S3);
+    mt_audio_ = MtAudioInDevice::Create(*std::move(mmio_audio), MtAudioInDevice::I2S3);
     if (mt_audio_ == nullptr) {
         zxlogf(ERROR, "%s failed to create device\n", __FUNCTION__);
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/audio/mt8167-tdm-output/audio-stream-out.cpp b/system/dev/audio/mt8167-tdm-output/audio-stream-out.cpp
index b827398..e36d492 100644
--- a/system/dev/audio/mt8167-tdm-output/audio-stream-out.cpp
+++ b/system/dev/audio/mt8167-tdm-output/audio-stream-out.cpp
@@ -75,7 +75,7 @@
     }
 
     // I2S2 corresponds to I2S_8CH.
-    mt_audio_ = MtAudioOutDevice::Create(std::move(*mmio_audio), MtAudioOutDevice::I2S2);
+    mt_audio_ = MtAudioOutDevice::Create(*std::move(mmio_audio), MtAudioOutDevice::I2S2);
     if (mt_audio_ == nullptr) {
         zxlogf(ERROR, "%s failed to create device\n", __FUNCTION__);
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/audio/sherlock-pdm-input/audio-stream-in.cpp b/system/dev/audio/sherlock-pdm-input/audio-stream-in.cpp
index d05a171..dff5e774d 100644
--- a/system/dev/audio/sherlock-pdm-input/audio-stream-in.cpp
+++ b/system/dev/audio/sherlock-pdm-input/audio-stream-in.cpp
@@ -79,8 +79,8 @@
         return status;
     }
 
-    pdm_ = AmlPdmDevice::Create(std::move(*mmio0),
-                                std::move(*mmio1),
+    pdm_ = AmlPdmDevice::Create(*std::move(mmio0),
+                                *std::move(mmio1),
                                 HIFI_PLL,
                                 7,   // clk_div for mclk = T931_HIFI_PLL_RATE/clk_div = 219.43 MHz.
                                 499, // clk_div for pdm_dclk = T931_HIFI_PLL_RATE/clk_div = 3.07MHz.
diff --git a/system/dev/audio/sherlock-tdm-output/audio-stream-out.cpp b/system/dev/audio/sherlock-tdm-output/audio-stream-out.cpp
index 586700a..83ec4db 100644
--- a/system/dev/audio/sherlock-tdm-output/audio-stream-out.cpp
+++ b/system/dev/audio/sherlock-tdm-output/audio-stream-out.cpp
@@ -62,7 +62,7 @@
     if (status != ZX_OK) {
         return status;
     }
-    aml_audio_ = AmlTdmDevice::Create(std::move(*mmio), HIFI_PLL, TDM_OUT_C, FRDDR_A, MCLK_A);
+    aml_audio_ = AmlTdmDevice::Create(*std::move(mmio), HIFI_PLL, TDM_OUT_C, FRDDR_A, MCLK_A);
     if (aml_audio_ == nullptr) {
         zxlogf(ERROR, "%s failed to create tdm device\n", __func__);
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/block/mtk-sdmmc/mtk-sdmmc.cpp b/system/dev/block/mtk-sdmmc/mtk-sdmmc.cpp
index c26b1bd..afd6fc8 100644
--- a/system/dev/block/mtk-sdmmc/mtk-sdmmc.cpp
+++ b/system/dev/block/mtk-sdmmc/mtk-sdmmc.cpp
@@ -163,7 +163,7 @@
     }
 
     fbl::AllocChecker ac;
-    fbl::unique_ptr<MtkSdmmc> device(new (&ac) MtkSdmmc(parent, std::move(*mmio), std::move(bti),
+    fbl::unique_ptr<MtkSdmmc> device(new (&ac) MtkSdmmc(parent, *std::move(mmio), std::move(bti),
                                                         info, std::move(irq), *reset_gpio,
                                                         *power_en_gpio, dev_info, config));
 
diff --git a/system/dev/clk/mtk-clk/mtk-clk.cpp b/system/dev/clk/mtk-clk/mtk-clk.cpp
index 1ed1e51..1a07641 100644
--- a/system/dev/clk/mtk-clk/mtk-clk.cpp
+++ b/system/dev/clk/mtk-clk/mtk-clk.cpp
@@ -138,7 +138,7 @@
     }
 
     fbl::AllocChecker ac;
-    fbl::unique_ptr<MtkClk> device(new (&ac) MtkClk(parent, std::move(*mmio)));
+    fbl::unique_ptr<MtkClk> device(new (&ac) MtkClk(parent, *std::move(mmio)));
     if (!ac.check()) {
         zxlogf(ERROR, "%s: MtkClk alloc failed\n", __FILE__);
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/input/goodix/gt92xx.cpp b/system/dev/input/goodix/gt92xx.cpp
index 46a50c6..2ba4f67 100644
--- a/system/dev/input/goodix/gt92xx.cpp
+++ b/system/dev/input/goodix/gt92xx.cpp
@@ -113,9 +113,9 @@
         return ZX_ERR_NO_RESOURCES;
     }
     auto goodix_dev = fbl::make_unique<Gt92xxDevice>(device,
-                                                     std::move(*i2c),
-                                                     std::move(*intr),
-                                                     std::move(*reset));
+                                                     *std::move(i2c),
+                                                     *std::move(intr),
+                                                     *std::move(reset));
 
     status = goodix_dev->Init();
     if (status != ZX_OK) {
diff --git a/system/dev/lib/operation/include/lib/operation/block.h b/system/dev/lib/operation/include/lib/operation/block.h
index 75e3424..9756190 100644
--- a/system/dev/lib/operation/include/lib/operation/block.h
+++ b/system/dev/lib/operation/include/lib/operation/block.h
@@ -57,7 +57,7 @@
 //     request = block::Operation::Alloc(op_size, parent_op_size);
 //
 //     if (!request) return ZX_ERR_NO_MEMORY;
-//     pool.add(std::move(*request));
+//     pool.add(*std::move(request));
 // }
 //
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/system/dev/lib/operation/include/lib/operation/nand.h b/system/dev/lib/operation/include/lib/operation/nand.h
index d5a1475..0f5cebe 100644
--- a/system/dev/lib/operation/include/lib/operation/nand.h
+++ b/system/dev/lib/operation/include/lib/operation/nand.h
@@ -61,7 +61,7 @@
 //     request = nand::Operation::Alloc(op_size, parent_op_size);
 //
 //     if (!request) return ZX_ERR_NO_MEMORY;
-//     pool.add(std::move(*request));
+//     pool.add(*std::move(request));
 // }
 //
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/system/dev/lib/usb/include/usb/request-cpp.h b/system/dev/lib/usb/include/usb/request-cpp.h
index 6121363..05b939d 100644
--- a/system/dev/lib/usb/include/usb/request-cpp.h
+++ b/system/dev/lib/usb/include/usb/request-cpp.h
@@ -72,7 +72,7 @@
 //     request = usb::Request::Alloc(op_size, DATA_SIZE, EP_ADDRESS, parent_req_size);
 //
 //     if (!request) return ZX_ERR_NO_MEMORY;
-//     pool.add(std::move(*request));
+//     pool.add(*std::move(request));
 // }
 //
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/system/dev/nand/nand/nand.cpp b/system/dev/nand/nand/nand.cpp
index 0c18bd1..cfdaed9 100644
--- a/system/dev/nand/nand/nand.cpp
+++ b/system/dev/nand/nand/nand.cpp
@@ -200,7 +200,7 @@
         // between each io.
         std::optional<Transaction> txn = txn_queue_.pop();
         if (txn) {
-            DoIo(std::move(*txn));
+            DoIo(*std::move(txn));
         } else {
             // Clear the "RECEIVED" flag under the lock.
             worker_event_.signal(kNandTxnReceived, 0);
diff --git a/system/dev/pci/amlogic-pcie/aml-pcie-device.cpp b/system/dev/pci/amlogic-pcie/aml-pcie-device.cpp
index 56a363b..47a20f9 100644
--- a/system/dev/pci/amlogic-pcie/aml-pcie-device.cpp
+++ b/system/dev/pci/amlogic-pcie/aml-pcie-device.cpp
@@ -83,7 +83,7 @@
         zxlogf(ERROR, "aml_pcie: failed to pin DBI, st = %d\n", st);
         return st;
     }
-    dbi_pinned_ = std::move(*mmio_pinned);
+    dbi_pinned_ = *std::move(mmio_pinned);
 
     st = pdev_map_mmio_buffer(&pdev_, kCfgMmio,
                               ZX_CACHE_POLICY_UNCACHED_DEVICE, &mmio);
@@ -184,9 +184,9 @@
     if (st != ZX_OK) return st;
 
     pcie_ = fbl::make_unique<AmlPcie>(
-        std::move(*dbi_),
-        std::move(*cfg_),
-        std::move(*rst_),
+        *std::move(dbi_),
+        *std::move(cfg_),
+        *std::move(rst_),
         1   // Single Lane PCIe
     );
 
diff --git a/system/dev/tee/optee/shared-memory.cpp b/system/dev/tee/optee/shared-memory.cpp
index 8db94bc..e6aa37d 100644
--- a/system/dev/tee/optee/shared-memory.cpp
+++ b/system/dev/tee/optee/shared-memory.cpp
@@ -67,7 +67,7 @@
         secure_world_paddr + shared_mem_offset,
         shared_mem_size,
         std::move(secure_world_memory),
-        std::move(*pinned)));
+        *std::move(pinned)));
 
     if (!ac.check()) {
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/test/operation/operation-pool-test.cpp b/system/dev/test/operation/operation-pool-test.cpp
index ed3dcd5..8c0bc28 100644
--- a/system/dev/test/operation/operation-pool-test.cpp
+++ b/system/dev/test/operation/operation-pool-test.cpp
@@ -80,7 +80,7 @@
 
     OperationPool pool;
     EXPECT_TRUE(pool.pop() == std::nullopt);
-    pool.push(std::move(*operation));
+    pool.push(*std::move(operation));
     EXPECT_TRUE(pool.pop() != std::nullopt);
     EXPECT_TRUE(pool.pop() == std::nullopt);
     END_TEST;
@@ -93,7 +93,7 @@
     for (size_t i = 0; i < 10; i++) {
         std::optional<Operation> operation = Operation::Alloc(kParentOpSize);
         ASSERT_TRUE(operation.has_value());
-        pool.push(std::move(*operation));
+        pool.push(*std::move(operation));
     }
 
     for (size_t i = 0; i < 10; i++) {
@@ -110,7 +110,7 @@
     for (size_t i = 0; i < 10; i++) {
         std::optional<Operation> operation = Operation::Alloc(kParentOpSize);
         ASSERT_TRUE(operation.has_value());
-        pool.push(std::move(*operation));
+        pool.push(*std::move(operation));
     }
 
     pool.Release();
diff --git a/system/dev/test/operation/operation-queue-test.cpp b/system/dev/test/operation/operation-queue-test.cpp
index 36ba3bd..1c02c63 100644
--- a/system/dev/test/operation/operation-queue-test.cpp
+++ b/system/dev/test/operation/operation-queue-test.cpp
@@ -82,7 +82,7 @@
 
     OperationQueue queue;
     EXPECT_TRUE(queue.pop() == std::nullopt);
-    queue.push(std::move(*operation));
+    queue.push(*std::move(operation));
     EXPECT_TRUE(queue.pop() != std::nullopt);
     EXPECT_TRUE(queue.pop() == std::nullopt);
     END_TEST;
@@ -95,7 +95,7 @@
     for (size_t i = 0; i < 10; i++) {
         std::optional<Operation> operation = Operation::Alloc(kParentOpSize);
         ASSERT_TRUE(operation.has_value());
-        queue.push(std::move(*operation));
+        queue.push(*std::move(operation));
     }
 
     for (size_t i = 0; i < 10; i++) {
@@ -112,7 +112,7 @@
     for (size_t i = 0; i < 10; i++) {
         std::optional<Operation> operation = Operation::Alloc(kParentOpSize);
         ASSERT_TRUE(operation.has_value());
-        queue.push(std::move(*operation));
+        queue.push(*std::move(operation));
     }
 
     queue.Release();
@@ -133,7 +133,7 @@
     for (size_t i = 0; i < 10; i++) {
         std::optional<SecondLayerOp> operation = SecondLayerOp::Alloc(kFirstLayerOpSize);
         ASSERT_TRUE(operation.has_value());
-        queue.push(std::move(*operation));
+        queue.push(*std::move(operation));
     }
 
     UnownedOperationQueue queue2;
@@ -181,7 +181,7 @@
         ASSERT_TRUE(operation.has_value());
         *operation->private_storage() = i;
         EXPECT_EQ(*operation->private_storage(), i);
-        queue.push(std::move(*operation));
+        queue.push(*std::move(operation));
     }
 
     operation::UnownedOperationQueue<FirstLayerOp, TestOpTraits, CallbackTraits, char> queue2;
@@ -231,7 +231,7 @@
         ASSERT_TRUE(operation.has_value());
         *operation->private_storage() = i;
         EXPECT_EQ(*operation->private_storage(), i);
-        queue.push(std::move(*operation));
+        queue.push(*std::move(operation));
     }
 
     auto callback = [](void* ctx, zx_status_t status, TestOp* operation) {
diff --git a/system/dev/test/usb/usb-request-pool-test.cpp b/system/dev/test/usb/usb-request-pool-test.cpp
index d8afac0..4e3601c 100644
--- a/system/dev/test/usb/usb-request-pool-test.cpp
+++ b/system/dev/test/usb/usb-request-pool-test.cpp
@@ -27,7 +27,7 @@
 
     usb::RequestPool pool;
     EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
-    pool.Add(std::move(*request));
+    pool.Add(*std::move(request));
     EXPECT_TRUE(pool.Get(kReqSize + 1) == std::nullopt);
     EXPECT_TRUE(pool.Get(kReqSize) != std::nullopt);
     EXPECT_TRUE(pool.Get(kReqSize) == std::nullopt);
@@ -42,7 +42,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
                   ZX_OK);
-        pool.Add(std::move(*request));
+        pool.Add(*std::move(request));
     }
 
     for (size_t i = 0; i < 10; i++) {
@@ -61,7 +61,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, size),
                   ZX_OK);
-        pool.Add(std::move(*request));
+        pool.Add(*std::move(request));
     }
 
     for (size_t i = 0; i < 10; i++) {
@@ -80,7 +80,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
                   ZX_OK);
-        pool.Add(std::move(*request));
+        pool.Add(*std::move(request));
     }
 
     pool.Release();
diff --git a/system/dev/test/usb/usb-request-queue-test.cpp b/system/dev/test/usb/usb-request-queue-test.cpp
index 102c75f..695b041 100644
--- a/system/dev/test/usb/usb-request-queue-test.cpp
+++ b/system/dev/test/usb/usb-request-queue-test.cpp
@@ -28,7 +28,7 @@
 
     usb::RequestQueue<void> queue;
     EXPECT_TRUE(queue.pop() == std::nullopt);
-    queue.push(std::move(*request));
+    queue.push(*std::move(request));
     EXPECT_TRUE(queue.pop() != std::nullopt);
     EXPECT_TRUE(queue.pop() == std::nullopt);
     END_TEST;
@@ -42,7 +42,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
                   ZX_OK);
-        queue.push(std::move(*request));
+        queue.push(*std::move(request));
     }
 
     for (size_t i = 0; i < 10; i++) {
@@ -61,7 +61,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
                   ZX_OK);
-        queue1.push(std::move(*request));
+        queue1.push(*std::move(request));
     }
 
     queue2 = std::move(queue1);
@@ -82,7 +82,7 @@
         std::optional<Request> request;
         ASSERT_EQ(Request::Alloc(&request, 0, 0, kParentReqSize),
                   ZX_OK);
-        queue.push(std::move(*request));
+        queue.push(*std::move(request));
     }
 
     queue.Release();
@@ -104,7 +104,7 @@
         std::optional<SecondLayerReq> request;
         ASSERT_EQ(SecondLayerReq::Alloc(&request, 0, 0, kFirstLayerReqSize),
                   ZX_OK);
-        queue.push(std::move(*request));
+        queue.push(*std::move(request));
     }
 
     usb::UnownedRequestQueue<void> queue2;
@@ -143,7 +143,7 @@
                   ZX_OK);
         *request->private_storage() = i;
         EXPECT_EQ(*request->private_storage(), i);
-        queue.push(std::move(*request));
+        queue.push(*std::move(request));
     }
 
     usb::UnownedRequestQueue<char> queue2;
@@ -185,7 +185,7 @@
                   ZX_OK);
         *request->private_storage() = i;
         EXPECT_EQ(*request->private_storage(), i);
-        queue.push(std::move(*request));
+        queue.push(*std::move(request));
     }
 
     auto callback = [](void* ctx, usb_request_t* request) {
diff --git a/system/dev/thermal/mtk-thermal/mtk-thermal.cpp b/system/dev/thermal/mtk-thermal/mtk-thermal.cpp
index 9808b83..ef00109 100644
--- a/system/dev/thermal/mtk-thermal/mtk-thermal.cpp
+++ b/system/dev/thermal/mtk-thermal/mtk-thermal.cpp
@@ -125,8 +125,8 @@
 
     fbl::AllocChecker ac;
     fbl::unique_ptr<MtkThermal> device(new (&ac) MtkThermal(
-        parent, std::move(*mmio), std::move(*fuse_mmio), std::move(*pll_mmio),
-        std::move(*pmic_mmio), clk, info, thermal_info, std::move(port), std::move(irq)));
+        parent, *std::move(mmio), *std::move(fuse_mmio), *std::move(pll_mmio),
+        *std::move(pmic_mmio), clk, info, thermal_info, std::move(port), std::move(irq)));
     if (!ac.check()) {
         zxlogf(ERROR, "%s: MtkThermal alloc failed\n", __FILE__);
         return ZX_ERR_NO_MEMORY;
diff --git a/system/dev/usb/usb-virtual-bus/usb-virtual-bus.cpp b/system/dev/usb/usb-virtual-bus/usb-virtual-bus.cpp
index 669a158..648e07e 100644
--- a/system/dev/usb/usb-virtual-bus/usb-virtual-bus.cpp
+++ b/system/dev/usb/usb-virtual-bus/usb-virtual-bus.cpp
@@ -127,7 +127,7 @@
         // special case endpoint zero
         for (auto request = eps_[0].host_reqs.pop(); request; request = eps_[0].host_reqs.pop()) {
             // Handle control requests outside of the lock to avoid deadlock.
-            HandleControl(std::move(*request));
+            HandleControl(*std::move(request));
         }
 
         for (unsigned i = 1; i < USB_MAX_EPS; i++) {
@@ -167,7 +167,7 @@
                     ep->req_offset = 0;
                 } else {
                     ep->req_offset = offset;
-                    ep->host_reqs.push_next(std::move(*req));
+                    ep->host_reqs.push_next(*std::move(req));
                 }
 
                 device_req->Complete(ZX_OK, length);
diff --git a/system/uapp/disk-pave/test/device-partitioner-test.cpp b/system/uapp/disk-pave/test/device-partitioner-test.cpp
index 918e59b..dbe0035 100644
--- a/system/uapp/disk-pave/test/device-partitioner-test.cpp
+++ b/system/uapp/disk-pave/test/device-partitioner-test.cpp
@@ -239,7 +239,7 @@
         ASSERT_EQ(fs_mgmt::RamNandCtl::Create(&ctl), ZX_OK);
         std::optional<fs_mgmt::RamNand> ram_nand;
         ASSERT_EQ(fs_mgmt::RamNand::Create(ctl, &info, &ram_nand), ZX_OK);
-        device->reset(new SkipBlockDevice(std::move(ctl), std::move(*ram_nand),
+        device->reset(new SkipBlockDevice(std::move(ctl), *std::move(ram_nand),
                                           std::move(mapper)));
         END_HELPER;
     }
diff --git a/system/ulib/blobfs/allocator.cpp b/system/ulib/blobfs/allocator.cpp
index 36e7d59..6993808 100644
--- a/system/ulib/blobfs/allocator.cpp
+++ b/system/ulib/blobfs/allocator.cpp
@@ -184,7 +184,7 @@
             out_nodes->reset();
             return ZX_ERR_NO_SPACE;
         }
-        out_nodes->push_back(std::move(*node));
+        out_nodes->push_back(*std::move(node));
     }
     return ZX_OK;
 }