diff --git a/cpp2rust/converter/rules/registry.cpp b/cpp2rust/converter/rules/registry.cpp index 182cb1c80c..06c6d32d0a 100644 --- a/cpp2rust/converter/rules/registry.cpp +++ b/cpp2rust/converter/rules/registry.cpp @@ -315,8 +315,7 @@ TypeRuleMatch findType(clang::QualType use) { if (!best.rule_decl) { auto spelled = RuleDecls::SpelledTypedef(ctx, use); if (spelled && !IsUserDefinedDecl(spelled)) { - use.dump(llvm::errs(), ctx); - llvm::report_fatal_error("typedef has no type rule"); + return findType(use.getCanonicalType()); } } return best; diff --git a/tests/unit/out/refcount/string.rs b/tests/unit/out/refcount/string.rs index 0554bcb5ef..b8116f7f97 100644 --- a/tests/unit/out/refcount/string.rs +++ b/tests/unit/out/refcount/string.rs @@ -330,6 +330,10 @@ fn main_0() -> i32 { assert!((((elem!(output_data, 1).read()) as i32) == (('a' as i8) as i32))); assert!((((elem!(output_data, 2).read()) as i32) == (('s' as i8) as i32))); assert!((((elem!(output_data, 3).read()) as i32) == (('t' as i8) as i32))); + let mut diff: i64 = (-3_i32 as i64); + assert!((diff < 0_i64)); + diff += 6_i64; + assert!((diff == 3_i64)); let mut t0: usize = ((*s1.borrow()).len() - 1); let mut t1: usize = (t0).wrapping_add(((p1.read()) as usize)); let mut t2: usize = (t1).wrapping_add(((*s2.borrow()).len() - 1)); diff --git a/tests/unit/out/unsafe/string.rs b/tests/unit/out/unsafe/string.rs index fa864e979a..5ab22b3acc 100644 --- a/tests/unit/out/unsafe/string.rs +++ b/tests/unit/out/unsafe/string.rs @@ -346,6 +346,10 @@ unsafe fn main_0() -> i32 { assert!((((*output_data.offset((1) as isize)) as i32) == (('a' as libc::c_char) as i32))); assert!((((*output_data.offset((2) as isize)) as i32) == (('s' as libc::c_char) as i32))); assert!((((*output_data.offset((3) as isize)) as i32) == (('t' as libc::c_char) as i32))); + let mut diff: i64 = (-3_i32 as i64); + assert!(((diff) < (0_i64))); + diff += 6_i64; + assert!(((diff) == (3_i64))); let mut t0: usize = (s1.len() - 1); let mut t1: usize = (t0).wrapping_add(((*p1) as usize)); let mut t2: usize = (t1).wrapping_add((s2.len() - 1)); diff --git a/tests/unit/string.cpp b/tests/unit/string.cpp index 302875e956..02e70149a6 100644 --- a/tests/unit/string.cpp +++ b/tests/unit/string.cpp @@ -138,6 +138,10 @@ int main() { assert(output_data[1] == 'a'); assert(output_data[2] == 's'); assert(output_data[3] == 't'); + std::string::difference_type diff = -3; + assert(diff < 0); + diff += 6; + assert(diff == 3); // FIXME auto t0 = s1.length();