summaryrefslogtreecommitdiff
path: root/libbindgen/src
diff options
context:
space:
mode:
Diffstat (limited to 'libbindgen/src')
-rw-r--r--libbindgen/src/ir/comp.rs6
-rw-r--r--libbindgen/src/ir/function.rs5
-rw-r--r--libbindgen/src/ir/ty.rs7
-rw-r--r--libbindgen/src/ir/var.rs11
4 files changed, 22 insertions, 7 deletions
diff --git a/libbindgen/src/ir/comp.rs b/libbindgen/src/ir/comp.rs
index 1c69e618..ea3850cc 100644
--- a/libbindgen/src/ir/comp.rs
+++ b/libbindgen/src/ir/comp.rs
@@ -748,9 +748,9 @@ impl CompInfo {
return CXChildVisit_Continue;
}
- let item = Item::parse(cur, Some(potential_id), ctx)
- .expect("VarDecl");
- ci.inner_vars.push(item);
+ if let Ok(item) = Item::parse(cur, Some(potential_id), ctx) {
+ ci.inner_vars.push(item);
+ }
}
// Intentionally not handled
CXCursor_CXXAccessSpecifier |
diff --git a/libbindgen/src/ir/function.rs b/libbindgen/src/ir/function.rs
index 7aed3d7e..88ab861d 100644
--- a/libbindgen/src/ir/function.rs
+++ b/libbindgen/src/ir/function.rs
@@ -134,6 +134,11 @@ impl FunctionSig {
use clang_sys::*;
debug!("FunctionSig::from_ty {:?} {:?}", ty, cursor);
+ // Skip function templates
+ if cursor.kind() == CXCursor_FunctionTemplate {
+ return Err(ParseError::Continue);
+ }
+
// Don't parse operatorxx functions in C++
let spelling = cursor.spelling();
if spelling.starts_with("operator") {
diff --git a/libbindgen/src/ir/ty.rs b/libbindgen/src/ir/ty.rs
index b04afeb6..6859b753 100644
--- a/libbindgen/src/ir/ty.rs
+++ b/libbindgen/src/ir/ty.rs
@@ -776,8 +776,11 @@ impl Type {
}
}
CXType_Auto => {
- // We don't want to blow the stack.
- assert!(canonical_ty != *ty, "Couldn't find deduced type");
+ if canonical_ty == *ty {
+ debug!("Couldn't find deduced type: {:?}", ty);
+ return Err(ParseError::Continue);
+ }
+
return Self::from_clang_ty(potential_id,
&canonical_ty,
location,
diff --git a/libbindgen/src/ir/var.rs b/libbindgen/src/ir/var.rs
index 518141c6..d9160eca 100644
--- a/libbindgen/src/ir/var.rs
+++ b/libbindgen/src/ir/var.rs
@@ -186,8 +186,15 @@ impl ClangSubItemParser for Var {
// XXX this is redundant, remove!
let is_const = ty.is_const();
- let ty = Item::from_ty(&ty, Some(cursor), None, ctx)
- .expect("Unable to resolve constant type?");
+ let ty = match Item::from_ty(&ty, Some(cursor), None, ctx) {
+ Ok(ty) => ty,
+ Err(e) => {
+ assert_eq!(ty.kind(), CXType_Auto,
+ "Couldn't resolve constant type, and it \
+ wasn't an nondeductible auto type!");
+ return Err(e);
+ }
+ };
// Note: Ty might not be totally resolved yet, see
// tests/headers/inner_const.hpp