[PATCH] D76096: [clang] allow const structs/unions/arrays to be constant expressions for C

Nick Desaulniers via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 21 15:37:10 PDT 2023


nickdesaulniers added a comment.

In D76096#4524092 <https://reviews.llvm.org/D76096#4524092>, @nickdesaulniers wrote:

> In D76096#4524003 <https://reviews.llvm.org/D76096#4524003>, @efriedma wrote:
>
>> The ones most likely to be a concern are InitListExpr and StringLiteral.
>
> Here's a reduced instance from the Linux kernel:
>
>   struct timespec64 {
>     long tv_sec;
>     long tv_nsec;
>   } do_utime_mtime;
>   void __attribute__do_utime() { struct timespec64 t[] = {{}, do_utime_mtime}; }
>
> Trace: https://paste.debian.net/1286590/

IIUC what's going wrong here, I think that ConstExprEmitter is //not// able to evaluate the InitListExpr, and is bailing/falling back to call Expr::EvaluateAsRValue().

Is the idea for the way forward here to ensure (i.e. adding code such) that ConstExprEmitter //can// constant evaluate such Expr's?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76096/new/

https://reviews.llvm.org/D76096



More information about the cfe-commits mailing list