Merge two upstream LLVM commits

This merges:

https://github.com/llvm/llvm-project/commit/0a4aa8a122aa0
https://github.com/llvm/llvm-project/commit/fd0637cfe835d

Bug: chromium:1520616
Change-Id: I5ff63eb37fd4e45ab1716607da313d9b9e87d2e0
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/72988
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Presubmit-Ready: Nico Weber <thakis@chromium.org>
Reviewed-by: Nico Weber <thakis@google.com>
Tested-by: Shahbaz Youssefi <syoussefi@google.com>
Commit-Queue: Nico Weber <thakis@chromium.org>
diff --git a/third_party/llvm-10.0/llvm/include/llvm/Demangle/ItaniumDemangle.h b/third_party/llvm-10.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
index 14f8102..d1d9617 100644
--- a/third_party/llvm-10.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/third_party/llvm-10.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -28,6 +28,7 @@
 #include <cstring>
 #include <exception>
 #include <numeric>
+#include <type_traits>
 #include <utility>
 
 #define FOR_EACH_NODE_KIND(X) \
@@ -2171,13 +2172,13 @@
 
 template <class T, size_t N>
 class PODSmallVector {
-  static_assert(std::is_pod<T>::value,
-                "T is required to be a plain old data type");
+  static_assert(std::is_trivial<T>::value,
+                "T is required to be a trivial type");
 
   T* First = nullptr;
   T* Last = nullptr;
   T* Cap = nullptr;
-  T Inline[N] = {0};
+  T Inline[N] = {};
 
   bool isInline() const { return First == Inline; }
 
diff --git a/third_party/llvm-16.0/llvm/include/llvm/Demangle/ItaniumDemangle.h b/third_party/llvm-16.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
index 121eae1..e20b04d 100644
--- a/third_party/llvm-16.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/third_party/llvm-16.0/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -33,13 +33,13 @@
 DEMANGLE_NAMESPACE_BEGIN
 
 template <class T, size_t N> class PODSmallVector {
-  static_assert(std::is_pod<T>::value,
-                "T is required to be a plain old data type");
+  static_assert(std::is_trivial<T>::value,
+                "T is required to be a trivial type");
 
   T *First = nullptr;
   T *Last = nullptr;
   T *Cap = nullptr;
-  T Inline[N] = {0};
+  T Inline[N] = {};
 
   bool isInline() const { return First == Inline; }