diff --git a/src/bindgen/parser.rs b/src/bindgen/parser.rs index f514fe74b..7281234f9 100644 --- a/src/bindgen/parser.rs +++ b/src/bindgen/parser.rs @@ -636,9 +636,12 @@ impl Parse { items.join("::") }; + let is_extern_c = sig.abi.is_omitted() || sig.abi.is_c(); + let exported_name = named_symbol.exported_name(); + if let syn::Visibility::Public(_) = vis { - if sig.abi.is_omitted() || sig.abi.is_c() { - if let Some(exported_name) = named_symbol.exported_name() { + match (is_extern_c, exported_name) { + (true, Some(exported_name)) => { let path = Path::new(exported_name); match Function::load(path, self_type, &sig, false, &attrs, mod_cfg) { Ok(func) => { @@ -649,17 +652,40 @@ impl Parse { error!("Cannot use fn {} ({}).", loggable_item_name(), msg); } } - } else { + } + (true, None) => { warn!( "Skipping {} - (not `no_mangle`, and has no `export_name` attribute)", loggable_item_name() ); } - } else { - warn!("Skipping {} - (not `extern \"C\"`", loggable_item_name()); + (false, Some(_exported_name)) => { + warn!("Skipping {} - (not `extern \"C\"`", loggable_item_name()); + } + (false, None) => {} } } else { - warn!("Skipping {} - (not `pub`)", loggable_item_name()); + match (is_extern_c, exported_name) { + (true, Some(exported_name)) => { + warn!( + "Skipping {} - (not `pub` but is `extern \"C\"` and `no_mangle`)", + loggable_item_name() + ); + } + (true, None) => { + warn!( + "Skipping {} - (not `pub` but is `extern \"C\"`)", + loggable_item_name() + ); + } + (false, Some(_exported_name)) => { + warn!( + "Skipping {} - (not `pub` but is `no_mangle`)", + loggable_item_name() + ); + } + (false, None) => {} + } } }