Snap for 7783696 from eeee2c9e187ef570c89ba557ebb6a38012aeda4c to sc-qpr1-d-release

Change-Id: I24d010f376ba75a3f5580fbaee379f018988f654
diff --git a/generate_cpp.cpp b/generate_cpp.cpp
index fcc27b6..619a2f2 100644
--- a/generate_cpp.cpp
+++ b/generate_cpp.cpp
@@ -1227,6 +1227,13 @@
       } else {
         out << " { ::android::Parcelable::Stability::STABILITY_LOCAL }";
       }
+    } else if (auto type = variable->GetType().GetDefinedType(); type) {
+      if (auto enum_type = type->AsEnumDeclaration(); enum_type) {
+        if (!variable->GetType().IsArray()) {
+          // if an enum doesn't have explicit default value, do zero-initialization
+          out << " = " << cppType << "(0)";
+        }
+      }
     }
     out << ";\n";
 
diff --git a/generate_ndk.cpp b/generate_ndk.cpp
index c87c5c6..ca8d66c 100644
--- a/generate_ndk.cpp
+++ b/generate_ndk.cpp
@@ -1046,6 +1046,13 @@
     }
     if (variable->GetDefaultValue()) {
       out << " = " << variable->ValueString(ConstantValueDecorator);
+    } else if (auto type = variable->GetType().GetDefinedType(); type) {
+      if (auto enum_type = type->AsEnumDeclaration(); enum_type) {
+        if (!variable->GetType().IsArray()) {
+          // if an enum doesn't have explicit default value, do zero-initialization
+          out << " = " << NdkNameOf(types, variable->GetType(), StorageMode::STACK) << "(0)";
+        }
+      }
     }
     out << ";\n";
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
index 795c81a..bfd1e58 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
@@ -46,9 +46,9 @@
   ::std::vector<int32_t> shouldContainThreeFs;
   int32_t f = int32_t(0);
   ::std::string shouldBeJerry;
-  ::android::aidl::tests::ByteEnum shouldBeByteBar;
-  ::android::aidl::tests::IntEnum shouldBeIntBar;
-  ::android::aidl::tests::LongEnum shouldBeLongBar;
+  ::android::aidl::tests::ByteEnum shouldBeByteBar = ::android::aidl::tests::ByteEnum(0);
+  ::android::aidl::tests::IntEnum shouldBeIntBar = ::android::aidl::tests::IntEnum(0);
+  ::android::aidl::tests::LongEnum shouldBeLongBar = ::android::aidl::tests::LongEnum(0);
   ::std::vector<::android::aidl::tests::ByteEnum> shouldContainTwoByteFoos;
   ::std::vector<::android::aidl::tests::IntEnum> shouldContainTwoIntFoos;
   ::std::vector<::android::aidl::tests::LongEnum> shouldContainTwoLongFoos;
@@ -80,16 +80,16 @@
   ::std::vector<int64_t> int64_1 = ::std::vector<int64_t>({1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L});
   int32_t hexInt32_pos_1 = int32_t(1);
   int32_t hexInt64_pos_1 = int32_t(1);
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_1;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_2;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_3;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_4;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_5;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_6;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_7;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_8;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_9;
-  ::android::aidl::tests::ConstantExpressionEnum const_exprs_10;
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_1 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_2 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_3 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_4 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_5 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_6 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_7 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_8 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_9 = ::android::aidl::tests::ConstantExpressionEnum(0);
+  ::android::aidl::tests::ConstantExpressionEnum const_exprs_10 = ::android::aidl::tests::ConstantExpressionEnum(0);
   ::std::string addString1 = ::std::string("hello world!");
   ::std::string addString2 = ::std::string("The quick brown fox jumps over the lazy dog.");
   int32_t shouldSetBit0AndBit2 = int32_t(0);
diff --git a/tests/golden_output/aidl-test-interface-ndk_platform-source/gen/include/aidl/android/aidl/tests/StructuredParcelable.h b/tests/golden_output/aidl-test-interface-ndk_platform-source/gen/include/aidl/android/aidl/tests/StructuredParcelable.h
index 01fd7a3..b665af5 100644
--- a/tests/golden_output/aidl-test-interface-ndk_platform-source/gen/include/aidl/android/aidl/tests/StructuredParcelable.h
+++ b/tests/golden_output/aidl-test-interface-ndk_platform-source/gen/include/aidl/android/aidl/tests/StructuredParcelable.h
@@ -27,9 +27,9 @@
   std::vector<int32_t> shouldContainThreeFs;
   int32_t f = 0;
   std::string shouldBeJerry;
-  ::aidl::android::aidl::tests::ByteEnum shouldBeByteBar;
-  ::aidl::android::aidl::tests::IntEnum shouldBeIntBar;
-  ::aidl::android::aidl::tests::LongEnum shouldBeLongBar;
+  ::aidl::android::aidl::tests::ByteEnum shouldBeByteBar = ::aidl::android::aidl::tests::ByteEnum(0);
+  ::aidl::android::aidl::tests::IntEnum shouldBeIntBar = ::aidl::android::aidl::tests::IntEnum(0);
+  ::aidl::android::aidl::tests::LongEnum shouldBeLongBar = ::aidl::android::aidl::tests::LongEnum(0);
   std::vector<::aidl::android::aidl::tests::ByteEnum> shouldContainTwoByteFoos;
   std::vector<::aidl::android::aidl::tests::IntEnum> shouldContainTwoIntFoos;
   std::vector<::aidl::android::aidl::tests::LongEnum> shouldContainTwoLongFoos;
@@ -61,16 +61,16 @@
   std::vector<int64_t> int64_1 = {1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L};
   int32_t hexInt32_pos_1 = 1;
   int32_t hexInt64_pos_1 = 1;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_1;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_2;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_3;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_4;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_5;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_6;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_7;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_8;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_9;
-  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_10;
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_1 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_2 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_3 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_4 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_5 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_6 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_7 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_8 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_9 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
+  ::aidl::android::aidl::tests::ConstantExpressionEnum const_exprs_10 = ::aidl::android::aidl::tests::ConstantExpressionEnum(0);
   std::string addString1 = "hello world!";
   std::string addString2 = "The quick brown fox jumps over the lazy dog.";
   int32_t shouldSetBit0AndBit2 = 0;