diff --git a/cpp2rust/converter/rules/expr_matcher.cpp b/cpp2rust/converter/rules/expr_matcher.cpp index e37369771..8e8d5baa7 100644 --- a/cpp2rust/converter/rules/expr_matcher.cpp +++ b/cpp2rust/converter/rules/expr_matcher.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -160,7 +161,9 @@ std::vector getOperands(clang::ASTContext &ctx, operands.assign(op->arg_begin(), op->arg_end()); if (!operands.empty() && llvm::isa_and_nonnull(op->getDirectCallee())) { - operands[0] = operands[0]->IgnoreParenImpCasts(); + operands[0] = + clang::IgnoreExprNodes(operands[0], clang::IgnoreParensSingleStep, + clang::IgnoreImplicitCastsSingleStep); } } else if (auto call = llvm::dyn_cast(expr)) { operands.push_back(getObject( diff --git a/tests/unit/out/refcount/vector_bool_reference.rs b/tests/unit/out/refcount/vector_bool_reference.rs index 0931b964c..0f577e5c1 100644 --- a/tests/unit/out/refcount/vector_bool_reference.rs +++ b/tests/unit/out/refcount/vector_bool_reference.rs @@ -26,6 +26,11 @@ fn main_0() -> i32 { (r2).clone() }; assert!(v1.decay().offset(0_usize as isize).read()); + { + v1.decay().offset(0_usize as isize).write(false); + v1.decay().offset(0_usize as isize) + }; + assert!(!(v1.decay().offset(0_usize as isize).read())); return 0; } pub fn __cpp2rust_init_globals() {} diff --git a/tests/unit/out/unsafe/vector_bool_reference.rs b/tests/unit/out/unsafe/vector_bool_reference.rs index 0819a7302..809ba2f6b 100644 --- a/tests/unit/out/unsafe/vector_bool_reference.rs +++ b/tests/unit/out/unsafe/vector_bool_reference.rs @@ -28,6 +28,11 @@ unsafe fn main_0() -> i32 { r2 }; assert!(*(&mut (v1)[0_usize as usize] as *mut bool)); + { + *(&mut (v1)[0_usize as usize] as *mut bool) = false; + (&mut (v1)[0_usize as usize] as *mut bool) + }; + assert!(!(*(&mut (v1)[0_usize as usize] as *mut bool))); return 0; } pub unsafe fn __cpp2rust_init_globals() {} diff --git a/tests/unit/vector_bool_reference.cpp b/tests/unit/vector_bool_reference.cpp index 8b3af32d8..bc8880958 100644 --- a/tests/unit/vector_bool_reference.cpp +++ b/tests/unit/vector_bool_reference.cpp @@ -11,5 +11,7 @@ int main() { auto r2 = *it; r2 = true; assert(v1[0]); + v1[0] = false; + assert(!v1[0]); return 0; }