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