From 6e51b5b1d7d7a60775d210c3769cbe9412c9fcb1 Mon Sep 17 00:00:00 2001 From: AmrDeveloper Date: Sun, 12 Oct 2025 18:39:29 +0200 Subject: [PATCH] [CIR] Backport UnaryExtension for AggregateExpr --- clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp | 2 +- clang/test/CIR/CodeGen/struct.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp b/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp index d792fe7af52b..54921e7fd4c0 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp @@ -186,7 +186,7 @@ class AggExprEmitter : public StmtVisitor { } void VisitCoyieldExpr(CoyieldExpr *E) { llvm_unreachable("NYI"); } void VisitUnaryCoawait(UnaryOperator *E) { llvm_unreachable("NYI"); } - void VisitUnaryExtension(UnaryOperator *E) { llvm_unreachable("NYI"); } + void VisitUnaryExtension(UnaryOperator *E) { Visit(E->getSubExpr()); } void VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E) { llvm_unreachable("NYI"); } diff --git a/clang/test/CIR/CodeGen/struct.cpp b/clang/test/CIR/CodeGen/struct.cpp index 951caef7c1f8..3af0743e8997 100644 --- a/clang/test/CIR/CodeGen/struct.cpp +++ b/clang/test/CIR/CodeGen/struct.cpp @@ -195,3 +195,12 @@ void designated_init_update_expr() { // CHECK: %[[CONST_1:.*]] = cir.const #cir.int<1> : !s32i // CHECK: cir.store{{.*}} %[[CONST_1]], %[[ELEM_0_PTR]] : !s32i, !cir.ptr // CHECK: %[[ELEM_1_PTR:.*]] = cir.get_member %[[C_ADDR]][1] {name = "b"} : !cir.ptr -> !cir.ptr + +void unary_extension() { + CompleteS a = __extension__ CompleteS(); +} + +// CHECK: %[[A_ADDR:.*]] = cir.alloca !rec_CompleteS, !cir.ptr, ["a"] +// CHECK: %[[ZERO_INIT:.*]] = cir.const #cir.zero : !rec_CompleteS +// CHECK: cir.store{{.*}} %[[ZERO_INIT]], %[[A_ADDR]] : !rec_CompleteS, !cir.ptr +