Roll forward of https://github.com/google/crubit/commit/dd0c157616fac4313f4b2dd3f55ac5f1323cfbee

Don't generate bindings for standard library decls with hidden visibility

PiperOrigin-RevId: 474765330
diff --git a/rs_bindings_from_cc/BUILD b/rs_bindings_from_cc/BUILD
index 688e257..4ac8f4d 100644
--- a/rs_bindings_from_cc/BUILD
+++ b/rs_bindings_from_cc/BUILD
@@ -486,6 +486,7 @@
     "cwchar",
     "cwctype",
     "initializer_list",
+    "ios",
     "limits",
     "memory",
     "mutex",
diff --git a/rs_bindings_from_cc/importers/cxx_record.cc b/rs_bindings_from_cc/importers/cxx_record.cc
index 608533b..e591d14 100644
--- a/rs_bindings_from_cc/importers/cxx_record.cc
+++ b/rs_bindings_from_cc/importers/cxx_record.cc
@@ -125,6 +125,17 @@
   if (record_decl->isInvalidDecl()) {
     return std::nullopt;
   }
+  if (record_decl->isInStdNamespace() &&
+      record_decl->hasAttr<clang::VisibilityAttr>()) {
+    auto visibility = record_decl->getAttr<clang::VisibilityAttr>();
+    if (visibility->getVisibility() ==
+        clang::VisibilityAttr::VisibilityType::Hidden) {
+      return ictx_.ImportUnsupportedItem(
+          record_decl,
+          "Records from the standard library with hidden visibility are not "
+          "supported");
+    }
+  }
 
   absl::StatusOr<RecordType> record_type = TranslateRecordType(*record_decl);
   if (!record_type.ok()) {
diff --git a/rs_bindings_from_cc/importers/function.cc b/rs_bindings_from_cc/importers/function.cc
index 4ae2bbd..8bd34eb 100644
--- a/rs_bindings_from_cc/importers/function.cc
+++ b/rs_bindings_from_cc/importers/function.cc
@@ -14,6 +14,17 @@
     clang::FunctionDecl* function_decl) {
   if (!ictx_.IsFromCurrentTarget(function_decl)) return std::nullopt;
   if (function_decl->isDeleted()) return std::nullopt;
+  if (function_decl->isInStdNamespace() &&
+      function_decl->hasAttr<clang::VisibilityAttr>()) {
+    auto visibility = function_decl->getAttr<clang::VisibilityAttr>();
+    if (visibility->getVisibility() ==
+        clang::VisibilityAttr::VisibilityType::Hidden) {
+      return ictx_.ImportUnsupportedItem(
+          function_decl,
+          "Functions from the standard library with hidden visibility are not "
+          "supported");
+    }
+  }
 
   // TODO(lukasza, mboehme): Consider changing the GetLifetimeAnnotations API to
   // distinguish 1) no lifetime annotations found vs 2) erroneous lifetime