Skip to content

Commit 19fff3e

Browse files
committed
Check if clang_Type_getNumTemplateArguments is loaded before use
Older clang don't have it, and while we can't pass our whole test suite with those older clangs, we can still generate simple C bindings, so it makes sense not to panic for C++ only things.
1 parent 74834c7 commit 19fff3e

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/clang.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,10 @@ impl Type {
833833
/// Get the number of template arguments this type has, or `None` if it is
834834
/// not some kind of template.
835835
pub fn num_template_args(&self) -> Option<u32> {
836+
if !clang_Type_getNumTemplateArguments::is_loaded() {
837+
return None
838+
}
839+
836840
let n = unsafe { clang_Type_getNumTemplateArguments(self.x) };
837841
if n >= 0 {
838842
Some(n as u32)
@@ -1594,14 +1598,19 @@ pub fn ast_dump(c: &Cursor, depth: isize) -> CXChildVisitResult {
15941598

15951599
print_indent(depth,
15961600
format!(" {}spelling = \"{}\"", prefix, ty.spelling()));
1597-
let num_template_args =
1598-
unsafe { clang_Type_getNumTemplateArguments(ty.x) };
1601+
1602+
let num_template_args = if clang_Type_getNumTemplateArguments::is_loaded() {
1603+
unsafe { clang_Type_getNumTemplateArguments(ty.x) }
1604+
} else {
1605+
-1
1606+
};
15991607
if num_template_args >= 0 {
16001608
print_indent(depth,
16011609
format!(" {}number-of-template-args = {}",
16021610
prefix,
16031611
num_template_args));
16041612
}
1613+
16051614
if let Some(num) = ty.num_elements() {
16061615
print_indent(depth,
16071616
format!(" {}number-of-elements = {}", prefix, num));

0 commit comments

Comments
 (0)