[Clang] support C23 constexpr struct member access in constant expressions (#182770) Fixes #178349 --- This patch resolves an issue where accessing C23 `constexpr` struct members using the dot operator was not recognized as a constant expression. According to C23 spec: > 6.6p7: > > An identifier that is: > — an enumeration constant, > — a predefined constant, or > — declared with storage-class specifier constexpr and has an object type, > is a named constant, as is a postfix expression that applies the . member access operator to a named > constant of structure or union type, even recursively. For enumeration and predefined constants, > their value and type are defined in the respective clauses; for constexpr objects, such a named > constant is a constant expression with the type and value of the declared object. > > § 6.6p13: > > A structure or union constant is a named constant or compound literal constant with structure or > union type, respectively > > § 6.6p15: > > Starting from a structure or union constant, the member-access . operator may be used to form a > named constant or compound literal constant as described previously in this subclause
Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called “LLVM”. This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.