Merge "Strip unknown attributes during bitcode translation."
diff --git a/bcinfo/Android.bp b/bcinfo/Android.bp
index bd4fee5..e35bbd0 100644
--- a/bcinfo/Android.bp
+++ b/bcinfo/Android.bp
@@ -56,6 +56,7 @@
         "libLLVMBitReader_2_7",
         "libLLVMBitReader_3_0",
         "libLLVMBitWriter_3_2",
+	"libStripUnkAttr",
     ],
 
     target: {
diff --git a/bcinfo/BitcodeTranslator.cpp b/bcinfo/BitcodeTranslator.cpp
index 5335eba..b3bce31 100644
--- a/bcinfo/BitcodeTranslator.cpp
+++ b/bcinfo/BitcodeTranslator.cpp
@@ -23,6 +23,8 @@
 
 #include "BitWriter_3_2/ReaderWriter_3_2.h"
 
+#include "StripUnkAttr/strip_unknown_attributes.h"
+
 #define LOG_TAG "bcinfo"
 #include <log/log.h>
 
@@ -68,6 +70,11 @@
 static const unsigned int kMinimumCompatibleVersion_LLVM_2_7 = 11;
 
 
+static void stripUnknownAttributes(llvm::Module *M) {
+  for (llvm::Function &F : *M)
+    slang::stripUnknownAttributes(F);
+}
+
 BitcodeTranslator::BitcodeTranslator(const char *bitcode, size_t bitcodeSize,
                                      unsigned int version)
     : mBitcode(bitcode), mBitcodeSize(bitcodeSize), mTranslatedBitcode(nullptr),
@@ -145,6 +152,8 @@
   // Module ownership is handled by the context, so we don't need to free it.
   llvm::Module *module = MOrErr.get();
 
+  stripUnknownAttributes(module);
+
   std::string Buffer;
 
   llvm::raw_string_ostream OS(Buffer);