https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/170089
>From 9858d29921fedbe1005e76695ccb80f9aca75624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <[email protected]> Date: Mon, 1 Dec 2025 09:58:56 +0100 Subject: [PATCH] [clang][bytecode] Fix discarding ImplitiValueInitExprs --- clang/lib/AST/ByteCode/Compiler.cpp | 3 +++ clang/test/AST/ByteCode/c.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp index dd0b8e790d444..58e84ef70abb7 100644 --- a/clang/lib/AST/ByteCode/Compiler.cpp +++ b/clang/lib/AST/ByteCode/Compiler.cpp @@ -1705,6 +1705,9 @@ bool Compiler<Emitter>::VisitFixedPointUnaryOperator(const UnaryOperator *E) { template <class Emitter> bool Compiler<Emitter>::VisitImplicitValueInitExpr( const ImplicitValueInitExpr *E) { + if (DiscardResult) + return true; + QualType QT = E->getType(); if (OptPrimType T = classify(QT)) diff --git a/clang/test/AST/ByteCode/c.c b/clang/test/AST/ByteCode/c.c index bffd557ff77a6..0d3d97b5eeab2 100644 --- a/clang/test/AST/ByteCode/c.c +++ b/clang/test/AST/ByteCode/c.c @@ -392,3 +392,16 @@ void plainComplex(void) { _Complex cd; // all-warning {{_Complex double}} cd = *(_Complex *)&(struct { double r, i; }){0.0, 0.0}; // all-warning {{_Complex double}} } + +/// This test results in an ImplicitValueInitExpr with DiscardResult set. +struct M{ + char c; +}; +typedef struct S64 { + struct M m; + char a[64]; +} I64; + +_Static_assert((((I64){}, 1)), ""); // all-warning {{left operand of comma operator has no effect}} \ + // pedantic-warning {{use of an empty initializer is a C23 extension}} \ + // pedantic-warning {{expression is not an integer constant expression; folding it to a constant is a GNU extension}} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
