diff --git a/cc_bindings_from_rs/generate_bindings/database/fully_qualified_name.rs b/cc_bindings_from_rs/generate_bindings/database/fully_qualified_name.rs index 58d0c7b50..628009cbe 100644 --- a/cc_bindings_from_rs/generate_bindings/database/fully_qualified_name.rs +++ b/cc_bindings_from_rs/generate_bindings/database/fully_qualified_name.rs @@ -199,7 +199,7 @@ impl PublicPaths { } pub fn merge(&mut self, mut other: Self) { - if self.canonical_path < other.canonical_path { + if self.canonical_path > other.canonical_path { std::mem::swap(&mut self.canonical_path, &mut other.canonical_path); } self.insert_aliases(other); diff --git a/cc_bindings_from_rs/generate_bindings/lib.rs b/cc_bindings_from_rs/generate_bindings/lib.rs index 67e9ee599..0b80a4cca 100644 --- a/cc_bindings_from_rs/generate_bindings/lib.rs +++ b/cc_bindings_from_rs/generate_bindings/lib.rs @@ -591,7 +591,7 @@ fn resolve_if_use(db: &BindingsGenerator<'_>, def_id: DefId) -> Option { fn symbol_unqualified_name(db: &BindingsGenerator<'_>, def_id: DefId) -> Option { let tcx = db.tcx(); let item_name = db - .public_paths_by_def_id(def_id.krate) + .all_public_paths_by_def_id() .get(&def_id) .map(|path| path.canonical().name) .or_else(|| tcx.opt_item_name(def_id))?; diff --git a/cc_bindings_from_rs/test/uses/trasitive_reexports/direct.rs b/cc_bindings_from_rs/test/uses/trasitive_reexports/direct.rs index 1b0dbed70..817d03c1b 100644 --- a/cc_bindings_from_rs/test/uses/trasitive_reexports/direct.rs +++ b/cc_bindings_from_rs/test/uses/trasitive_reexports/direct.rs @@ -27,3 +27,5 @@ impl Direct { Direct { value: train.value } } } + +pub use transitive::TransitiveReexportAndDirectReexport; diff --git a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive.rs b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive.rs index 563c67614..7db9e238c 100644 --- a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive.rs +++ b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive.rs @@ -20,3 +20,7 @@ pub mod public { pub value: i32, } } + +pub struct TransitiveReexportAndDirectReexport { + pub value: i32, +} diff --git a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports.rs b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports.rs index 6bcc3b641..ac389ca35 100644 --- a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports.rs +++ b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports.rs @@ -26,3 +26,5 @@ pub fn direct_to_transitive_private_type_alias( pub fn direct_to_transitive_use_alias(direct: &direct::Direct) -> direct::TransitiveUseAlias { direct::TransitiveUseAlias { value: direct.value } } + +pub type DirectReexportOfTransitive = direct::TransitiveReexportAndDirectReexport; diff --git a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_cc_api.h b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_cc_api.h index f5517eb00..3094b0ed5 100644 --- a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_cc_api.h +++ b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_cc_api.h @@ -14,6 +14,7 @@ #pragma clang diagnostic ignored "-Wreturn-type-c-linkage" #pragma clang diagnostic ignored "-Wunused-private-field" #pragma clang diagnostic ignored "-Wdeprecated-declarations" +#include "support/annotations_internal.h" #include "support/internal/slot.h" #include @@ -46,6 +47,19 @@ ::direct::Transitive direct_to_transitive_use_alias( ::direct::Transitive direct_to_transittive_type_alias( ::direct::Direct const& direct); +} // namespace transitive_reexports + +namespace transitive_reexports { + +// Generated from: +// cc_bindings_from_rs/test/uses/trasitive_reexports/transitive.rs;l=24 +using DirectReexportOfTransitive CRUBIT_INTERNAL_RUST_TYPE( + ":: direct :: TransitiveReexportAndDirectReexport") = + ::direct::TransitiveReexportAndDirectReexport; +} // namespace transitive_reexports + +namespace transitive_reexports { + namespace __crubit_internal { extern "C" void __crubit_thunk_direct_uto_utransitive( ::direct::Direct const&, ::direct::Transitive* __ret_ptr); diff --git a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_test.cc b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_test.cc index 107eb35d2..6e3736b39 100644 --- a/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_test.cc +++ b/cc_bindings_from_rs/test/uses/trasitive_reexports/transitive_reexports_test.cc @@ -7,6 +7,9 @@ namespace { +static_assert(std::is_same_v); + TEST(TransitiveReexportsTest, DirectToTransitive) { static_assert(std::is_same_v); direct::Transitive transitive = direct::Transitive::new_(1);