Merge "PointerType: disallow embedded"
diff --git a/PointerType.cpp b/PointerType.cpp
index cdf4a99..2b8e5a4 100644
--- a/PointerType.cpp
+++ b/PointerType.cpp
@@ -31,8 +31,8 @@
     return true;
 }
 
-std::string PointerType::getCppType(StorageMode /* mode */,
-                                   bool /* specifyNamespaces */) const {
+std::string PointerType::getCppType(StorageMode /*mode*/,
+                                    bool /*specifyNamespaces*/) const {
     return "void*";
 }
 
@@ -47,16 +47,36 @@
 void PointerType::emitReaderWriter(
         Formatter& out,
         const std::string& name,
-        const std::string& /* parcelObj */,
-        bool /* parcelObjIsPointer */,
-        bool /* isReader */,
-        ErrorMode /* mode */) const {
+        const std::string& /*parcelObj*/,
+        bool /*parcelObjIsPointer*/,
+        bool /*isReader*/,
+        ErrorMode /*mode*/) const {
     out << "(void)" << name << ";\n";
-    out << "LOG_ALWAYS_FATAL(\"Pointer is only supported in passthrough mode\");\n";
+    out << "LOG_ALWAYS_FATAL(\"Pointer is only supported in passthrough mode\");\n\n";
+}
+
+void PointerType::emitReaderWriterEmbedded(
+        Formatter& out,
+        size_t /*depth*/,
+        const std::string& name,
+        const std::string& /*sanitizedName*/,
+        bool /*nameIsPointer*/,
+        const std::string& parcelObj,
+        bool parcelObjIsPointer,
+        bool isReader,
+        ErrorMode mode,
+        const std::string& parentName,
+        const std::string& offsetText) const {
+    out << "(void) " << parcelObj << ";\n";
+    out << "(void) " << parentName << ";\n";
+    out << "(void) (" << offsetText << ");\n";
+
+    // same exact code
+    emitReaderWriter(out, name, parcelObj, parcelObjIsPointer, isReader, mode);
 }
 
 bool PointerType::needsEmbeddedReadWrite() const {
-    return false;
+    return true;
 }
 
 bool PointerType::resultNeedsDeref() const {
diff --git a/PointerType.h b/PointerType.h
index 30c4a32..a5004c2 100644
--- a/PointerType.h
+++ b/PointerType.h
@@ -45,6 +45,19 @@
             bool isReader,
             ErrorMode mode) const override;
 
+    void emitReaderWriterEmbedded(
+            Formatter &out,
+            size_t depth,
+            const std::string &name,
+            const std::string &sanitizedName,
+            bool nameIsPointer,
+            const std::string &parcelObj,
+            bool parcelObjIsPointer,
+            bool isReader,
+            ErrorMode mode,
+            const std::string &parentName,
+            const std::string &offsetText) const override;
+
     bool needsEmbeddedReadWrite() const override;
     bool resultNeedsDeref() const override;
 
diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp
index fd340c2..fcba0fc 100644
--- a/test/hidl_test/hidl_test_client.cpp
+++ b/test/hidl_test/hidl_test_client.cpp
@@ -474,20 +474,19 @@
     auto handle2 = native_handle_create(0, 1);
     handle->data[0] = 5;
     handle2->data[0] = 6;
-    IFoo::Everything e {
-        .u = {.p = reinterpret_cast<void *>(0x5)},
+    IFoo::Everything e{
+        .u = {.number = 3},
         .number = 10,
         .h = handle,
         .descSync = {std::vector<GrantorDescriptor>(), handle, 5},
         .descUnsync = {std::vector<GrantorDescriptor>(), handle2, 6},
         .mem = hidl_memory("mymem", handle, 5),
-        .p = reinterpret_cast<void *>(0x6),
+        .p = reinterpret_cast<void*>(0x6),
         .vs = {"hello", "world"},
         .multidimArray = hidl_vec<hidl_string>{"hello", "great", "awesome", "nice"}.data(),
         .sArray = hidl_vec<hidl_string>{"awesome", "thanks", "you're welcome"}.data(),
         .anotherStruct = {.first = "first", .last = "last"},
-        .bf = IFoo::BitField::V0 | IFoo::BitField::V2
-    };
+        .bf = IFoo::BitField::V0 | IFoo::BitField::V2};
     LOG(INFO) << toString(e);
     LOG(INFO) << toString(foo);
     // toString is for debugging purposes only; no good EXPECT