Update prebuilt Clang to r416183b from Android.

https://android.googlesource.com/platform/prebuilts/clang/host/
linux-x86/+/06a71ddac05c22edb2d10b590e1769b3f8619bef

clang 12.0.5 (based on r416183b) from build 7284624.

Change-Id: I277a316abcf47307562d8b748b84870f31a72866
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/linux-x64/clang/include/lld/Common/Strings.h b/linux-x64/clang/include/lld/Common/Strings.h
index ded22dd..38d93e0 100644
--- a/linux-x64/clang/include/lld/Common/Strings.h
+++ b/linux-x64/clang/include/lld/Common/Strings.h
@@ -18,9 +18,8 @@
 
 namespace lld {
 // Returns a demangled C++ symbol name. If Name is not a mangled
-// name, it returns Optional::None.
-llvm::Optional<std::string> demangleItanium(llvm::StringRef name);
-llvm::Optional<std::string> demangleMSVC(llvm::StringRef s);
+// name, it returns name.
+std::string demangleItanium(llvm::StringRef name);
 
 std::vector<uint8_t> parseHex(llvm::StringRef s);
 bool isValidCIdentifier(llvm::StringRef s);
@@ -28,16 +27,57 @@
 // Write the contents of the a buffer to a file
 void saveBuffer(llvm::StringRef buffer, const llvm::Twine &path);
 
-// This class represents multiple glob patterns.
-class StringMatcher {
+// A single pattern to match against. A pattern can either be double-quoted
+// text that should be matched exactly after removing the quoting marks or a
+// glob pattern in the sense of GlobPattern.
+class SingleStringMatcher {
 public:
-  StringMatcher() = default;
-  explicit StringMatcher(llvm::ArrayRef<llvm::StringRef> pat);
+  // Create a StringPattern from Pattern to be matched exactly irregardless
+  // of globbing characters if ExactMatch is true.
+  SingleStringMatcher(llvm::StringRef Pattern);
 
+  // Match s against this pattern, exactly if ExactMatch is true.
   bool match(llvm::StringRef s) const;
 
+  // Returns true for pattern "*" which will match all inputs.
+  bool isTrivialMatchAll() const {
+    return !ExactMatch && GlobPatternMatcher.isTrivialMatchAll();
+  }
+
 private:
-  std::vector<llvm::GlobPattern> patterns;
+  // Whether to do an exact match irregardless of the presence of wildcard
+  // character.
+  bool ExactMatch;
+
+  // GlobPattern object if not doing an exact match.
+  llvm::GlobPattern GlobPatternMatcher;
+
+  // StringRef to match exactly if doing an exact match.
+  llvm::StringRef ExactPattern;
+};
+
+// This class represents multiple patterns to match against. A pattern can
+// either be a double-quoted text that should be matched exactly after removing
+// the quoted marks or a glob pattern.
+class StringMatcher {
+private:
+  // Patterns to match against.
+  std::vector<SingleStringMatcher> patterns;
+
+public:
+  StringMatcher() = default;
+
+  // Matcher for a single pattern.
+  StringMatcher(llvm::StringRef Pattern)
+      : patterns({SingleStringMatcher(Pattern)}) {}
+
+  // Add a new pattern to the existing ones to match against.
+  void addPattern(SingleStringMatcher Matcher) { patterns.push_back(Matcher); }
+
+  bool empty() const { return patterns.empty(); }
+
+  // Match s against the patterns.
+  bool match(llvm::StringRef s) const;
 };
 
 } // namespace lld