From 58e95d330fff16ae04c4a52f8b8a56be2bda52c4 Mon Sep 17 00:00:00 2001 From: Pietro Fezzardi Date: Fri, 8 May 2026 11:37:10 +0200 Subject: [PATCH] Drop assign_array macro The macro is no longer necessary: the code now ensures we never need to assign anything to an array, which would be ill-advised nevertheless given that array-typed rvalues in C immediately decay to pointers. --- lib/CliftEmitC/CBackend.cpp | 27 --------------------------- lib/Model/NameBuilder.cpp | 1 - share/revng/include/primitive-types.h | 11 +---------- 3 files changed, 1 insertion(+), 38 deletions(-) diff --git a/lib/CliftEmitC/CBackend.cpp b/lib/CliftEmitC/CBackend.cpp index b8b62e39e..2607b076a 100644 --- a/lib/CliftEmitC/CBackend.cpp +++ b/lib/CliftEmitC/CBackend.cpp @@ -489,26 +489,6 @@ public: Tokens.emitOperator(getOperator(Op)); } - RecursiveCoroutine emitAssignMacroExpression(mlir::Value V) { - auto Assign = V.getDefiningOp(); - - auto LHS = Assign.getOperand(0); - auto RHS = Assign.getOperand(1); - - Tokens.emitLiteralIdentifier("assign_array"); - Tokens.emitPunctuator(CTE::Punctuator::LeftParenthesis); - - rc_recur emitExpression(LHS); - - Tokens.emitPunctuator(CTE::Punctuator::Comma); - Tokens.emitSpace(); - CurrentPrecedence = OperatorPrecedence::Parentheses; - - rc_recur emitExpression(RHS); - - Tokens.emitPunctuator(CTE::Punctuator::RightParenthesis); - } - RecursiveCoroutine emitInfixExpression(mlir::Value V) { mlir::Operation *Op = V.getDefiningOp(); @@ -744,13 +724,6 @@ public: if (auto Assign = V.getDefiningOp()) { auto LHS = Assign.getOperand(0); auto RHS = Assign.getOperand(1); - if (isa(LHS.getType()) - or isa(RHS.getType())) { - return { - .Precedence = OperatorPrecedence::UnaryPostfix, - .Emit = &CliftToCEmitter::emitAssignMacroExpression, - }; - } return { .Precedence = OperatorPrecedence::Assignment, .Emit = &CliftToCEmitter::emitInfixExpression, diff --git a/lib/Model/NameBuilder.cpp b/lib/Model/NameBuilder.cpp index 02fb895b7..2af8648a5 100644 --- a/lib/Model/NameBuilder.cpp +++ b/lib/Model/NameBuilder.cpp @@ -324,7 +324,6 @@ const std::set ReservedKeywords = { "__typeof__", "bit_cast", "static_assert_typedef", - "assign_array", }; /// Returns `true` iff the identifier is exactly the given prefix + a decimal diff --git a/share/revng/include/primitive-types.h b/share/revng/include/primitive-types.h index 9c33cac9b..268ed6995 100644 --- a/share/revng/include/primitive-types.h +++ b/share/revng/include/primitive-types.h @@ -232,7 +232,7 @@ extern uintmax_t undef_value(void); // // __typeof__ is required for properly implementing a generic bitcast primitive -// and a generic array_assignment primitive that only need the destination type. +// that only needs the destination type. #if defined(__GNUC__) // For Clang and GCC, they both have __typeof__ // Don't do anything, __typeof__ is already available #elif __STDC_VERSION__ >= 202311L // C23 has typeof @@ -274,12 +274,3 @@ extern uintmax_t undef_value(void); .dst) #endif // defined(__GNU_C_) - -// -// array_assign and array_bit_cast -// - -#define assign_array(x, ...) \ - (*(__typeof__(x) *) __builtin_memcpy(&(x), \ - &((__VA_ARGS__)), \ - sizeof(__typeof__(x))))