diff --git a/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp b/clang/lib/CIR/CodeGen/CIRGenExprAgg.cpp index c6e27ce7e289..85a7c36cb6a7 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 26a4d59cdb1a..27d3e9d90fa3 100644 --- a/clang/test/CIR/CodeGen/struct.cpp +++ b/clang/test/CIR/CodeGen/struct.cpp @@ -196,6 +196,14 @@ void designated_init_update_expr() { // 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 + void generic_selection() { CompleteS a; CompleteS b; @@ -219,4 +227,4 @@ void choose_expr() { // CHECK: %[[A_ADDR:.*]] = cir.alloca !rec_CompleteS, !cir.ptr, ["a"] // CHECK: %[[B_ADDR:.*]] = cir.alloca !rec_CompleteS, !cir.ptr, ["b"] // CHECK: %[[C_ADDR:.*]] = cir.alloca !rec_CompleteS, !cir.ptr, ["c", init] -// CHECK: cir.copy %[[A_ADDR]] to %[[C_ADDR]] : !cir.ptr \ No newline at end of file +// CHECK: cir.copy %[[A_ADDR]] to %[[C_ADDR]] : !cir.ptr