File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3400,6 +3400,15 @@ bool Converter::VisitUnaryExprOrTypeTraitExpr(
34003400 : expr->getArgumentExpr ()->getType ())));
34013401 computed_expr_type_ = ComputedExprType::FreshValue;
34023402 break ;
3403+ case clang::UnaryExprOrTypeTrait::UETT_AlignOf:
3404+ case clang::UnaryExprOrTypeTrait::UETT_PreferredAlignOf:
3405+ StrCat (std::format (
3406+ " ::std::mem::align_of::<{}>()" ,
3407+ GetUnsafeTypeAsString (expr->isArgumentType ()
3408+ ? expr->getArgumentType ()
3409+ : expr->getArgumentExpr ()->getType ())));
3410+ computed_expr_type_ = ComputedExprType::FreshValue;
3411+ break ;
34033412 default :
34043413 // FIXME: improve error handling
34053414 log () << " unsupported unary expr or type trait expr\n " ;
Original file line number Diff line number Diff line change @@ -1402,14 +1402,26 @@ bool ConverterRefCount::VisitExplicitCastExpr(clang::ExplicitCastExpr *expr) {
14021402
14031403bool ConverterRefCount::VisitUnaryExprOrTypeTraitExpr (
14041404 clang::UnaryExprOrTypeTraitExpr *expr) {
1405- if (expr->getKind () == clang::UnaryExprOrTypeTrait::UETT_SizeOf) {
1406- auto arg_type = expr->isArgumentType () ? expr->getArgumentType ()
1407- : expr->getArgumentExpr ()->getType ();
1405+ auto arg_type = expr->isArgumentType () ? expr->getArgumentType ()
1406+ : expr->getArgumentExpr ()->getType ();
1407+ switch (expr->getKind ()) {
1408+ case clang::UnaryExprOrTypeTrait::UETT_SizeOf:
14081409 if (RustSizeDivergesFromC (arg_type)) {
14091410 StrCat (std::format (" {}usize" , ctx_.getTypeSize (arg_type) / 8 ));
14101411 computed_expr_type_ = ComputedExprType::FreshValue;
14111412 return false ;
14121413 }
1414+ break ;
1415+ case clang::UnaryExprOrTypeTrait::UETT_AlignOf:
1416+ case clang::UnaryExprOrTypeTrait::UETT_PreferredAlignOf:
1417+ if (RustSizeDivergesFromC (arg_type)) {
1418+ StrCat (std::format (" {}usize" , ctx_.getTypeAlign (arg_type) / 8 ));
1419+ computed_expr_type_ = ComputedExprType::FreshValue;
1420+ return false ;
1421+ }
1422+ break ;
1423+ default :
1424+ break ;
14131425 }
14141426 return Converter::VisitUnaryExprOrTypeTraitExpr (expr);
14151427}
You can’t perform that action at this time.
0 commit comments