https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/102428
Backport 3606d69d0b57dc1d23a4362e376e7ad27f650c27 Requested by: @Fznamznon >From 06f978d840269d92ad2fceea651784f64133c657 Mon Sep 17 00:00:00 2001 From: Mariya Podchishchaeva <mariya.podchishcha...@intel.com> Date: Thu, 8 Aug 2024 08:51:56 +0200 Subject: [PATCH] [clang] Fix crash when #embed used in a compound literal (#102304) Fixes https://github.com/llvm/llvm-project/issues/102248 (cherry picked from commit 3606d69d0b57dc1d23a4362e376e7ad27f650c27) --- clang/lib/Sema/SemaInit.cpp | 4 ++-- clang/test/Sema/embed_compound_literal.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 clang/test/Sema/embed_compound_literal.c diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index dc2ba039afe7f..eea4bdfa68b52 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -515,8 +515,8 @@ class InitListChecker { uint64_t ElsCount = 1; // Otherwise try to fill whole array with embed data. if (Entity.getKind() == InitializedEntity::EK_ArrayElement) { - ValueDecl *ArrDecl = Entity.getParent()->getDecl(); - auto *AType = SemaRef.Context.getAsArrayType(ArrDecl->getType()); + auto *AType = + SemaRef.Context.getAsArrayType(Entity.getParent()->getType()); assert(AType && "expected array type when initializing array"); ElsCount = Embed->getDataElementCount(); if (const auto *CAType = dyn_cast<ConstantArrayType>(AType)) diff --git a/clang/test/Sema/embed_compound_literal.c b/clang/test/Sema/embed_compound_literal.c new file mode 100644 index 0000000000000..7ba6fd8e64968 --- /dev/null +++ b/clang/test/Sema/embed_compound_literal.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -std=c23 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -x c++ -Wno-c23-extensions %s +// expected-no-diagnostics + +char *p1 = (char[]){ +#embed __FILE__ +}; + +int *p2 = (int[]){ +#embed __FILE__ +}; + +int *p3 = (int[30]){ +#embed __FILE__ limit(30) +}; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits