describeContents() returns CONTENTS_FILE_DESCRIPTOR

Parcelable.describeContents() returns CONTENTS_FILE_DESCRIPTOR when the
contents hold a file descriptor.

Bug: 170677046
Test: aidl_unittests / aidl_integration_test
Change-Id: Idb06123def25c78f7e4ed5317e61ddee8ca39d5d
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 3bf8c47..63a7d4f 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -405,14 +405,16 @@
       comments_(comments),
       split_name_(Split(unresolved_name, ".")) {}
 
-AidlTypeSpecifier AidlTypeSpecifier::ArrayBase() const {
+const AidlTypeSpecifier& AidlTypeSpecifier::ArrayBase() const {
   AIDL_FATAL_IF(!is_array_, this);
   // Declaring array of generic type cannot happen, it is grammar error.
   AIDL_FATAL_IF(IsGeneric(), this);
 
-  AidlTypeSpecifier array_base = *this;
-  array_base.is_array_ = false;
-  return array_base;
+  if (!array_base_) {
+    array_base_.reset(new AidlTypeSpecifier(*this));
+    array_base_->is_array_ = false;
+  }
+  return *array_base_;
 }
 
 bool AidlTypeSpecifier::IsHidden() const {