summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ir/context.rs23
-rw-r--r--tests/expectations/tests/issue-1676-macro-namespace-prefix.rs8
-rw-r--r--tests/headers/issue-1676-macro-namespace-prefix.hpp2
3 files changed, 30 insertions, 3 deletions
diff --git a/src/ir/context.rs b/src/ir/context.rs
index 127c0a24..384edb95 100644
--- a/src/ir/context.rs
+++ b/src/ir/context.rs
@@ -2166,10 +2166,27 @@ If you encounter an error missing from this list, please file an issue or a PR!"
}
break;
}
- _ => {
+ spelling if !found_namespace_keyword => {
+ // This is _likely_, but not certainly, a macro that's been placed just before
+ // the namespace keyword. Unfortunately, clang tokens don't let us easily see
+ // through the ifdef tokens, so we don't know what this token should really be.
+ // Instead of panicking though, we warn the user that we assumed the token was
+ // blank, and then move on.
+ //
+ // See also https://github.com/rust-lang/rust-bindgen/issues/1676.
+ warn!(
+ "Ignored unknown namespace prefix '{}' at {:?} in {:?}",
+ String::from_utf8_lossy(spelling),
+ token,
+ cursor
+ );
+ }
+ spelling => {
panic!(
- "Unknown token while processing namespace: {:?}",
- token
+ "Unknown token '{}' while processing namespace at {:?} in {:?}",
+ String::from_utf8_lossy(spelling),
+ token,
+ cursor
);
}
}
diff --git a/tests/expectations/tests/issue-1676-macro-namespace-prefix.rs b/tests/expectations/tests/issue-1676-macro-namespace-prefix.rs
new file mode 100644
index 00000000..d6776794
--- /dev/null
+++ b/tests/expectations/tests/issue-1676-macro-namespace-prefix.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/issue-1676-macro-namespace-prefix.hpp b/tests/headers/issue-1676-macro-namespace-prefix.hpp
new file mode 100644
index 00000000..297927b6
--- /dev/null
+++ b/tests/headers/issue-1676-macro-namespace-prefix.hpp
@@ -0,0 +1,2 @@
+#define nssv_inline_ns inline
+nssv_inline_ns namespace literals {}