Author: Timm Bäder Date: 2024-04-29T16:30:12+02:00 New Revision: bb770deb9acf554a17ad49c0b3af9b8cf83ec221
URL: https://github.com/llvm/llvm-project/commit/bb770deb9acf554a17ad49c0b3af9b8cf83ec221 DIFF: https://github.com/llvm/llvm-project/commit/bb770deb9acf554a17ad49c0b3af9b8cf83ec221.diff LOG: [clang][Interp] Reject void-typed InitListExprs Added: Modified: clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/test/AST/Interp/functions.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 568a929c6a1693..0a93a6a198a9de 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1114,6 +1114,9 @@ bool ByteCodeExprGen<Emitter>::visitArrayElemInit(unsigned ElemIndex, template <class Emitter> bool ByteCodeExprGen<Emitter>::VisitInitListExpr(const InitListExpr *E) { + if (E->getType()->isVoidType()) + return this->emitInvalid(E); + // Handle discarding first. if (DiscardResult) { for (const Expr *Init : E->inits()) { diff --git a/clang/test/AST/Interp/functions.cpp b/clang/test/AST/Interp/functions.cpp index a4ae73e423e74c..a5bb9f1a19aaa7 100644 --- a/clang/test/AST/Interp/functions.cpp +++ b/clang/test/AST/Interp/functions.cpp @@ -611,3 +611,9 @@ namespace { static_assert((g<int>(), true), ""); } + +namespace { + /// The InitListExpr here is of void type. + void bir [[clang::annotate("B", {1, 2, 3, 4})]] (); // both-error {{'annotate' attribute requires parameter 1 to be a constant expression}} \ + // both-note {{subexpression not valid in a constant expression}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits