From c4a006dbdf1c7d0ee331a87affff14c4b5dd83f1 Mon Sep 17 00:00:00 2001 From: Mikko Lehtonen Date: Wed, 14 Nov 2018 00:48:48 +0200 Subject: [PATCH] Fix noisy errors This silences errors from template functions and dependant types. --- src/ir/item.rs | 3 ++- src/ir/ty.rs | 3 +++ tests/expectations/tests/enum_in_template.rs | 17 +++++++++++++++++ tests/expectations/tests/template_fun.rs | 8 ++++++++ tests/headers/enum_in_template.hpp | 10 ++++++++++ tests/headers/template_fun.hpp | 3 +++ 6 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tests/expectations/tests/enum_in_template.rs create mode 100644 tests/expectations/tests/template_fun.rs create mode 100644 tests/headers/enum_in_template.hpp create mode 100644 tests/headers/template_fun.hpp diff --git a/src/ir/item.rs b/src/ir/item.rs index a6ee4ff341..380313e753 100644 --- a/src/ir/item.rs +++ b/src/ir/item.rs @@ -1319,7 +1319,8 @@ impl ClangItemParser for Item { CXCursor_UsingDeclaration | CXCursor_UsingDirective | CXCursor_StaticAssert | - CXCursor_InclusionDirective => { + CXCursor_InclusionDirective | + CXCursor_FunctionTemplate => { debug!( "Unhandled cursor kind {:?}: {:?}", cursor.kind(), diff --git a/src/ir/ty.rs b/src/ir/ty.rs index 75d5960d14..922146ea8d 100644 --- a/src/ir/ty.rs +++ b/src/ir/ty.rs @@ -1184,6 +1184,9 @@ impl Type { name = interface.rust_name(); TypeKind::ObjCInterface(interface) } + CXType_Dependent => { + return Err(ParseError::Continue); + } _ => { error!( "unsupported type: kind = {:?}; ty = {:?}; at {:?}", diff --git a/tests/expectations/tests/enum_in_template.rs b/tests/expectations/tests/enum_in_template.rs new file mode 100644 index 0000000000..24be7a7173 --- /dev/null +++ b/tests/expectations/tests/enum_in_template.rs @@ -0,0 +1,17 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct Foo { + pub _address: u8, +} +pub const Foo_Bar_A: Foo_Bar = 0; +pub const Foo_Bar_B: Foo_Bar = 0; +pub type Foo_Bar = i32; diff --git a/tests/expectations/tests/template_fun.rs b/tests/expectations/tests/template_fun.rs new file mode 100644 index 0000000000..d6776794e9 --- /dev/null +++ b/tests/expectations/tests/template_fun.rs @@ -0,0 +1,8 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] diff --git a/tests/headers/enum_in_template.hpp b/tests/headers/enum_in_template.hpp new file mode 100644 index 0000000000..41c017c4bc --- /dev/null +++ b/tests/headers/enum_in_template.hpp @@ -0,0 +1,10 @@ + +template +class Foo +{ + enum Bar + { + A, + B + }; +}; diff --git a/tests/headers/template_fun.hpp b/tests/headers/template_fun.hpp new file mode 100644 index 0000000000..17b1383bcf --- /dev/null +++ b/tests/headers/template_fun.hpp @@ -0,0 +1,3 @@ +// this will be ignored +template +void foo() {}