Merge cherrypicks of [17395477] into security-aosp-qt-release.

Change-Id: I6a65efc1be792cea73686a461cfc0b0c517d0447
diff --git a/generate_cpp.cpp b/generate_cpp.cpp
index 9d2a1fb..fb7f5f1 100644
--- a/generate_cpp.cpp
+++ b/generate_cpp.cpp
@@ -1021,6 +1021,9 @@
     if (variable->GetDefaultValue()) {
       out << " = " << type->CppType().c_str() << "("
           << variable->ValueString(ConstantValueDecorator) << ")";
+    } else if (AidlTypenames::IsPrimitiveTypename(variable->GetType().GetName()) &&
+               !variable->GetType().IsArray()) {
+      out << " = {}";
     }
     out << ";\n";
 
diff --git a/generate_ndk.cpp b/generate_ndk.cpp
index f0445f7..f382861 100644
--- a/generate_ndk.cpp
+++ b/generate_ndk.cpp
@@ -774,6 +774,9 @@
     out << NdkNameOf(types, variable->GetType(), StorageMode::STACK) << " " << variable->GetName();
     if (variable->GetDefaultValue()) {
       out << " = " << variable->ValueString(AidlConstantValueDecorator);
+    } else if (AidlTypenames::IsPrimitiveTypename(variable->GetType().GetName()) &&
+               !variable->GetType().IsArray()) {
+      out << " = {}";
     }
     out << ";\n";
   }
diff --git a/tests/android/aidl/tests/StructuredParcelable.aidl b/tests/android/aidl/tests/StructuredParcelable.aidl
index 2ced1e8..34d3e6c 100644
--- a/tests/android/aidl/tests/StructuredParcelable.aidl
+++ b/tests/android/aidl/tests/StructuredParcelable.aidl
@@ -36,4 +36,15 @@
     double checkDoubleFromFloat = 3.14f;
     String[] checkStringArray1 = { "a", "b" };
     @utf8InCpp String[] checkStringArray2 = { "a", "b" };
+
+    // primitive types will be initialized with {}.
+    boolean aBoolean;
+    byte aByte;
+    char aChar;
+    int anInt;
+    long aLong;
+    float aFloat;
+    double aDouble;
+    // arrays are not primitive type.
+    int[] anIntArray;
 }