From 720f0b67aa2d3350070e37c52931a3fa1b9b9862 Mon Sep 17 00:00:00 2001 From: Adrian Taylor Date: Wed, 8 Jan 2025 16:55:41 +0000 Subject: [PATCH] Probable fix for unrepresentable concrete typedef. --- engine/src/conversion/analysis/type_converter.rs | 5 ++++- engine/src/conversion/mod.rs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/engine/src/conversion/analysis/type_converter.rs b/engine/src/conversion/analysis/type_converter.rs index 99cd61de0..40bd081a5 100644 --- a/engine/src/conversion/analysis/type_converter.rs +++ b/engine/src/conversion/analysis/type_converter.rs @@ -372,7 +372,10 @@ impl<'a> TypeConverter<'a> { } let (new_tn, api) = self.get_templated_typename(&Type::Path(typ))?; extra_apis.extend(api.into_iter()); - deps.remove(&tn); + // Although it's tempting to remove the dep on the original type, + // this means we wouldn't spot cases where the original type can't + // be represented in C++, e.g. because it has an unused template parameter. + // So we keep the original dep too. typ = new_tn.to_type_path(); deps.insert(new_tn); } diff --git a/engine/src/conversion/mod.rs b/engine/src/conversion/mod.rs index fa24d4db5..57f8d9fef 100644 --- a/engine/src/conversion/mod.rs +++ b/engine/src/conversion/mod.rs @@ -120,7 +120,7 @@ impl<'a> BridgeConverter<'a> { Self::dump_apis("parsing", &apis); // Inside parse_results, we now have a list of APIs. // We now enter various analysis phases. - // Next, convert any typedefs. + // First, convert any typedefs. // "Convert" means replacing bindgen-style type targets // (e.g. root::std::unique_ptr) with cxx-style targets (e.g. UniquePtr). let apis = convert_typedef_targets(self.config, apis);