diff --git a/libbindgen/src/clang.rs b/libbindgen/src/clang.rs index 3f272607df..192ce09dbc 100644 --- a/libbindgen/src/clang.rs +++ b/libbindgen/src/clang.rs @@ -402,12 +402,12 @@ impl Cursor { /// Given that this cursor's referent is a `typedef`, get the `Type` that is /// being aliased. - pub fn typedef_type(&self) -> Type { - unsafe { - Type { - x: clang_getTypedefDeclUnderlyingType(self.x), - } - } + pub fn typedef_type(&self) -> Option { + let inner = Type { + x: unsafe { clang_getTypedefDeclUnderlyingType(self.x) } + }; + + if inner.is_valid() { Some(inner) } else { None } } /// Get the linkage kind for this cursor's referent. diff --git a/libbindgen/src/ir/ty.rs b/libbindgen/src/ir/ty.rs index 58ac7c871f..3d3799695d 100644 --- a/libbindgen/src/ir/ty.rs +++ b/libbindgen/src/ir/ty.rs @@ -660,7 +660,7 @@ impl Type { name = current.spelling(); - let inner_ty = cur.typedef_type(); + let inner_ty = cur.typedef_type().expect("Not valid Type?"); inner = Item::from_ty( &inner_ty, Some(cur), @@ -825,7 +825,7 @@ impl Type { TypeKind::Function(signature) } CXType_Typedef => { - let inner = cursor.typedef_type(); + let inner = cursor.typedef_type().expect("Not valid Type?"); let inner = Item::from_ty_or_ref(inner, location, parent_id, ctx); TypeKind::Alias(ty.spelling(), inner)