Skip to content

Commit 968f1ca

Browse files
committed
Handle array to pointer decay for libc members (#176)
1 parent db6226c commit 968f1ca

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

cpp2rust/converter/converter.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1979,9 +1979,18 @@ bool Converter::VisitImplicitCastExpr(clang::ImplicitCastExpr *expr) {
19791979
Convert(sub_expr);
19801980
break;
19811981
}
1982-
Convert(sub_expr);
19831982
bool dest_pointee_const =
19841983
expr->getType()->getPointeeType().isConstQualified();
1984+
if (const auto *member =
1985+
clang::dyn_cast<clang::MemberExpr>(sub_expr->IgnoreParenImpCasts());
1986+
member && IsCharArrayFieldFromLibc(member->getMemberDecl())) {
1987+
PushParen paren(*this);
1988+
Convert(sub_expr);
1989+
StrCat(dest_pointee_const ? ".as_ptr()" : ".as_mut_ptr()");
1990+
StrCat(keyword::kAs, dest_pointee_const ? "*const u8" : "*mut u8");
1991+
break;
1992+
}
1993+
Convert(sub_expr);
19851994
if (clang::isa<clang::StringLiteral>(sub_expr) ||
19861995
clang::isa<clang::PredefinedExpr>(sub_expr)) {
19871996
StrCat(".as_ptr()");

0 commit comments

Comments
 (0)