ART: Fix data loss when symbolizing oat files.

Change-Id: I1b40b8ee313a4d187439d969d083d12fb3997cda
diff --git a/compiler/buffered_output_stream.h b/compiler/buffered_output_stream.h
index bbc49df..15fc033 100644
--- a/compiler/buffered_output_stream.h
+++ b/compiler/buffered_output_stream.h
@@ -28,6 +28,7 @@
   explicit BufferedOutputStream(OutputStream* out);
 
   virtual ~BufferedOutputStream() {
+    Flush();
     delete out_;
   }
 
diff --git a/compiler/output_stream_test.cc b/compiler/output_stream_test.cc
index fbc9d0d..6104ccd 100644
--- a/compiler/output_stream_test.cc
+++ b/compiler/output_stream_test.cc
@@ -47,11 +47,12 @@
     CheckOffset(6);
     EXPECT_TRUE(output_stream_->WriteFully(buf, 4));
     CheckOffset(10);
+    EXPECT_TRUE(output_stream_->WriteFully(buf, 6));
   }
 
   void CheckTestOutput(const std::vector<uint8_t>& actual) {
     uint8_t expected[] = {
-        0, 0, 1, 2, 0, 0, 1, 2, 3, 4
+        0, 0, 1, 2, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6
     };
     EXPECT_EQ(sizeof(expected), actual.size());
     EXPECT_EQ(0, memcmp(expected, &actual[0], actual.size()));
@@ -75,11 +76,13 @@
 
 TEST_F(OutputStreamTest, Buffered) {
   ScratchFile tmp;
-  std::unique_ptr<FileOutputStream> file_output_stream(new FileOutputStream(tmp.GetFile()));
-  CHECK(file_output_stream.get() != nullptr);
-  BufferedOutputStream buffered_output_stream(file_output_stream.release());
-  SetOutputStream(buffered_output_stream);
-  GenerateTestOutput();
+  {
+    std::unique_ptr<FileOutputStream> file_output_stream(new FileOutputStream(tmp.GetFile()));
+    CHECK(file_output_stream.get() != nullptr);
+    BufferedOutputStream buffered_output_stream(file_output_stream.release());
+    SetOutputStream(buffered_output_stream);
+    GenerateTestOutput();
+  }
   std::unique_ptr<File> in(OS::OpenFileForReading(tmp.GetFilename().c_str()));
   EXPECT_TRUE(in.get() != nullptr);
   std::vector<uint8_t> actual(in->GetLength());