Skip to content

Commit fb4e183

Browse files
committed
Handle array to pointer decay for C literals
In C, as opposed to C++, string literals are char [] instead of const char [] so cast_mut should be added on ArrayToPointerDecay from char [] to char * instead of NoOp const char * to char *.
1 parent e3c9a83 commit fb4e183

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1729,7 +1729,11 @@ bool Converter::VisitImplicitCastExpr(clang::ImplicitCastExpr *expr) {
17291729
case clang::CastKind::CK_ArrayToPointerDecay:
17301730
if (clang::isa<clang::StringLiteral>(sub_expr) ||
17311731
clang::isa<clang::PredefinedExpr>(sub_expr)) {
1732-
return Convert(sub_expr);
1732+
Convert(sub_expr);
1733+
if (IsConversionFromStringLiteralToCharPtr(expr)) {
1734+
StrCat(".cast_mut()");
1735+
}
1736+
return false;
17331737
}
17341738
// __va_list_tag [1] decays to __va_list_tag *. Just pass through by value
17351739
if (IsVaListType(sub_expr->getType())) {

0 commit comments

Comments
 (0)