LLVM/project 184d97bclang/docs ReleaseNotes.md

[Clang] [Docs] Add release note for expansion statements (#208878)

This was supposed to be part of the original patch, but we lost it
because I didn't pay enough attention when I was merging the release
notes after the migration from RST -> MD (I deleted the RST file but
forgot to move the release note to the MD file...)
DeltaFile
+3-0clang/docs/ReleaseNotes.md
+3-01 files

LLVM/project 445fc8bclang/test/OpenMP teams_distribute_parallel_for_simd_if_openmp52_codegen.cpp, llvm/docs LangRef.rst LangRef.md

Merge branch 'main' into users/aokblast/lldb/set_error
DeltaFile
+20,241-21,265llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+0-33,206llvm/docs/LangRef.rst
+30,305-0llvm/docs/LangRef.md
+8,882-7,730llvm/test/MC/AMDGPU/gfx12_asm_vopc.s
+6,601-5,921llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-llvm.amdgcn.image.sample.a16.ll
+12,190-0clang/test/OpenMP/teams_distribute_parallel_for_simd_if_openmp52_codegen.cpp
+78,219-68,1224,709 files not shown
+410,515-329,4234,715 files

LLVM/project 3eb6ad3lldb/source/Expression IRMemoryMap.cpp IRInterpreter.cpp

[LLDB] Detect Memory overlapping between AllocateMemory and MemoryInfo

IRMemoryMap estimates a free address range using memory information.
However, the memory returns by AllocateMemory can overlap with the
ranges reported by MemoryInfo (internally backed by PT_VM_ENTRY),
because the kernel is unaware of allocations made during the probing
process.

As a result, two allocatios may silently insert duplicate key for
different objects, leading to intermittent test failure. The issue is
nodeterministic because it depends on the underlying malloc
implementation and ASLR.

Fix this by detecting overlapping allocations after AllocateMemory. If
an overlap is found, fall back to the address-guessing path, which
perform the necessary overlap checks before committing the allocation.

Also, return and print  message in IRInterpreter in unsecessful allocation.
DeltaFile
+20-1lldb/source/Expression/IRMemoryMap.cpp
+6-1lldb/source/Expression/IRInterpreter.cpp
+26-22 files

LLVM/project a74c2aflldb/source/Target Target.cpp

[LLDB] Print stderr in HandleStop

There are some testcases silently fail in stopping hook without
returning anything on FreeBSD. We dump the error from the handler to
make it easier to debug.
DeltaFile
+2-0lldb/source/Target/Target.cpp
+2-01 files

LLVM/project a83ec0fllvm/include/llvm/Transforms/Utils Cloning.h, llvm/lib/Transforms/Utils CloneFunction.cpp

[Utils] Improve documentation for `cloneLoopWithPreheader()` (#208817)

Fixed #191471.

The client needs to further update the CFG and DominatorTree after
calling `cloneLoopWithPreheader()` to ensure the IR remains valid, 
the function itself does not automatically update the control flow fully.
Clarified and improved the comments for the function.
DeltaFile
+2-0llvm/include/llvm/Transforms/Utils/Cloning.h
+2-0llvm/lib/Transforms/Utils/CloneFunction.cpp
+4-02 files

LLVM/project 7d38440libcxx/src/include overridable_function.h

[libc++] Replace the of use custom sections for detecting overriden functions (#208330)

This is a follow up to #133876 and an alternative to #120805 which
doesn't rely on aliases and works across both ELF and Mach-O. This
mechanism is preferable in baremetal environments since it doesn't
require special handling of the custom sections.
DeltaFile
+45-67libcxx/src/include/overridable_function.h
+45-671 files

LLVM/project a1feacbclang CMakeLists.txt

Add build option CLANG_INCLUDE_EXAMPLES (#187317)

Adds a new build option for clang, CLANG_INCLUDE_EXAMPLES, which
controls if the examples directory is included in the build. It defaults
to the value for LLVM_INCLUDE_EXAMPLES (same as CLANG_INCLUDE_DOCS and
CLANG_INCLUDE_TESTS)

Signed-off-by: Jade Abraham <jademabraham17 at gmail.com>
DeltaFile
+6-1clang/CMakeLists.txt
+6-11 files

LLVM/project 43ef833compiler-rt/test lit.common.cfg.py, compiler-rt/test/builtins/Unit compiler_rt_scalbn_test.c compiler_rt_scalbnf_test.c

[Darwin] Mark scalbn tests unsupported on macOS 26.4 (#208858)
DeltaFile
+2-0compiler-rt/test/lit.common.cfg.py
+1-0compiler-rt/test/builtins/Unit/compiler_rt_scalbn_test.c
+1-0compiler-rt/test/builtins/Unit/compiler_rt_scalbnf_test.c
+4-03 files

LLVM/project e059f90llvm/lib/Transforms/Utils SimplifyCFG.cpp, llvm/test/Transforms/SimplifyCFG convergent-jump-threading.ll

[SimplifyCFG] Do not thread branches into uncontrolled convergent regions

SimplifyCFG's foldCondBranchOnValueKnownInPredecessor can thread an edge past
a block that acts as a reconvergence point. If the threaded destination reaches
an uncontrolled convergent operation before returning to the threaded-through
block, the transform can change which dynamic instance of the convergent
operation is executed.

Add a conservative destination scan for this fold and skip the threading
candidate when it can reach an uncontrolled convergent call before returning
to the original block. Controlled convergent operations using convergence
control tokens are left alone.

Fixes ROCM-26496.
DeltaFile
+62-0llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+53-4llvm/test/Transforms/SimplifyCFG/convergent-jump-threading.ll
+115-42 files

LLVM/project 8d9de45llvm/test/Transforms/SimplifyCFG convergent-jump-threading.ll

[NFC] Pre-commit a test case for a SimplifyCFG issue
DeltaFile
+94-0llvm/test/Transforms/SimplifyCFG/convergent-jump-threading.ll
+94-01 files

LLVM/project 20e952eclang/lib/Sema SemaType.cpp SemaOpenCL.cpp, clang/test/SemaOpenCL storageclass.cl access-qualifier.cl

[OpenCL] Fix extensions checks for 3.1 (#208370)

These extension checks apply to 3.1 as well.
This fix kernel build fails when OpenCL 3.1 is enabled in
https://github.com/intel/opencl-clang/pull/752

Assisted-by: Claude
DeltaFile
+17-13clang/test/SemaOpenCL/storageclass.cl
+7-5clang/test/SemaOpenCL/access-qualifier.cl
+7-0clang/test/SemaOpenCL/fp64-fp16-options.cl
+2-2clang/lib/Sema/SemaType.cpp
+3-0clang/test/SemaOpenCL/unsupported-image.cl
+1-1clang/lib/Sema/SemaOpenCL.cpp
+37-211 files not shown
+38-227 files

LLVM/project ea21481clang/lib/Sema SemaExpand.cpp

[Clang] Fix APSInt width of template argument in FinishCXXExpansionStmt() (#208859)

After merging #169680, we started getting assertions in
IntegerLiteral::Create() on some ARM systems:

```
Assertion `V.getBitWidth() == C.getIntWidth(type) &&
"Integer type is not the correct size for constant."'
```

The expansion statements patch doesn't ever create an IntegerLiteral
directly, but there is one place where we create a TemplateArgument of
type 'ptrdiff_t', but we unconditionally set the bit width of its APSInt
to 64 bits.

Presumably, the assertion is due to 'ptrdiff_t' not being a 64-bit type
on these systems, so make sure that we query its bit width and use that
as the width of the APSInt.


    [3 lines not shown]
DeltaFile
+6-2clang/lib/Sema/SemaExpand.cpp
+6-21 files

LLVM/project 8e955eelldb/include/lldb/DataFormatters TypeCategoryMap.h, lldb/source/DataFormatters TypeCategoryMap.cpp

[lldb] TypeCategoryMap: Replace ConstString with StringRef (#208117)

I plan on removing ConstStrings from DataFormatters where possible.
There's a lot of entangled classes in DataFormatters but TypeCategoryMap
feels approachable to start with.
DeltaFile
+11-10lldb/source/DataFormatters/TypeCategoryMap.cpp
+8-7lldb/include/lldb/DataFormatters/TypeCategoryMap.h
+19-172 files

LLVM/project a355651lldb/include/lldb/Core Debugger.h, lldb/source/Plugins/ScriptInterpreter/Python ScriptInterpreterPython.cpp ScriptInterpreterPythonImpl.h

[lldb] Serialize scripted-command output with the statusline (#208609)

A Python command's print() writes to sys.stdout, which the interpreter
session pointed at the debugger's raw terminal descriptor via
PyFile_FromFd. Those writes bypass the debugger's output lock, so they
can race with the statusline, resulting in truncated output. Back the
session's terminal stdout and stderr with a pipe instead. A reader
thread drains the pipe and writes to the terminal through
Debugger::PrintAsync, which takes the same output lock as the
statusline.

Only redirect when a statusline could actually be drawing: the pipe and
reader thread are set up only when StatuslineSupported() holds
(show-statusline is enabled and the output is an escape-code-capable
terminal) and the target is the debugger's own terminal. The interactive
interpreter opts out entirely, since input()'s readline line editing and
echo need both sys.stdin and sys.stdout to be the real terminal.

Python still gets a real line-buffered text file over the pipe, so

    [6 lines not shown]
DeltaFile
+190-7lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+46-0lldb/test/API/functionalities/statusline/TestStatusline.py
+31-7lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
+17-0lldb/test/API/functionalities/statusline/statusline_flood.py
+4-1lldb/include/lldb/Core/Debugger.h
+288-155 files

LLVM/project 18f8a35lldb/include/lldb/Utility Policy.h, lldb/source/Utility Policy.cpp

[lldb] Make PolicyStack::Get() out-of-line (#208815)

LLDB builds with hidden visibility by default, so a function-local
static in an inline function is not shared across shared library
boundaries: each dylib that includes this header and calls an inline
Get() gets its own private copy of the thread_local stack, silently
splitting one logical per-thread stack into several. Declaring it
out-of-line ensures every dylib resolves to the single instance defined
in Policy.cpp.

Nothing currently pushes a policy from outside liblldb, so this has no
observable effect yet, but any future capability that needs to be set in
one shared library and read in another depends on this.

Signed-off-by: Med Ismail Bennani <ismail at bennani.ma>
DeltaFile
+8-0lldb/source/Utility/Policy.cpp
+1-4lldb/include/lldb/Utility/Policy.h
+9-42 files

LLVM/project b5a7d1elldb/unittests/SymbolFile/PDB SymbolFilePDBTests.cpp

[lldb] Fix SymbolFilePDBTests build for StringRef FileSpec getters (#208857)

f9b5264523b1 changed FileSpec::GetDirectory() to return llvm::StringRef
instead of ConstString. ConstString had an operator bool, so the guard

```
if (left.GetDirectory() && right.GetDirectory())
```

compiled. StringRef has neither a bool conversion nor operator&&, so the
test no longer builds. Check for a non-empty directory instead, which
preserves the original "if BOTH have a directory" intent.
DeltaFile
+1-1lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp
+1-11 files

LLVM/project 8830609lldb/docs dil-expr-lang.ebnf, lldb/source/ValueObject DILEval.cpp DILLexer.cpp

[lldb] Add composite assignments to existing operators
DeltaFile
+47-14lldb/source/ValueObject/DILEval.cpp
+39-12lldb/source/ValueObject/DILLexer.cpp
+45-0lldb/test/API/commands/frame/var-dil/expr/Assignment/TestFrameVarDILCompositeAssign.py
+14-4lldb/source/ValueObject/DILAST.cpp
+11-3lldb/source/ValueObject/DILParser.cpp
+6-1lldb/docs/dil-expr-lang.ebnf
+162-343 files not shown
+174-349 files

LLVM/project 1b87946clang/include/clang/Basic AtomicLineLogger.h, clang/lib/Basic AtomicLineLogger.cpp CMakeLists.txt

[clang] Adding an Atomic Line Logger (#205395)

This PR adds an atomic line logger to `clang`.

Situations have arisen where `clang` performs multi-threaded tasks (such
as dependency scanning), and race conditions may happen. Such race
conditions are difficult to debug using either `lldb` or with
`llvm::errs()`.

This logger provides atomic logging per line to a file on disk with time
stamps at each line to facilitate such investigations. Specifically, the
logger is designed with the following properties:

1. Each line is atomically written to the backing file. This avoids
concurrent writes making the output text interleaving.
2. Each line is prefixed with a timestamp, a process ID and a thread ID.
3. `LogLine` implements a `<<` operator to allow arbitrary printable
types to be piped into it.
4. The `LogLine`'s user does not need to check if it is setup or valid.

    [12 lines not shown]
DeltaFile
+232-0clang/unittests/Basic/AtomicLineLoggerTest.cpp
+119-0clang/lib/Basic/AtomicLineLogger.cpp
+74-0clang/include/clang/Basic/AtomicLineLogger.h
+1-0clang/lib/Basic/CMakeLists.txt
+1-0clang/unittests/Basic/CMakeLists.txt
+427-05 files

LLVM/project 1dd5ad4clang/lib/CodeGen CGClass.cpp CodeGenModule.cpp, clang/test/CodeGenCXX msvc-global-delete-scope-no-dtor.cpp msvc-global-delete-scalar-array-split.cpp

[clang][win] MSVC-compat: Use `__global_delete` wrapper in deleting destructors instead of directly referencing `::operator delete` (#188372)

When Clang emits scalar/vector deleting destructors for classes with a
class-level `operator delete`, it generates a conditional dispatch that
can call either the class-level or global `::operator delete`. The
global path directly referenced `::operator delete`, causing `LNK2001`
linker errors in environments where no global `::operator delete`
exists.

MSVC handles this by calling `__global_delete` (and
`__global_array_delete` for vector deletes) - this is a compiler
generated function that is ONLY defined if there is a direct call to
global `::operator delete` for type with non-trivial destructors.
Additionally, it always emits an empty `__empty_global_delete` and uses
`/ALTERNATIVENAME` linker arg to default `__global_delete` (and
`__global_array_delete`) to `__empty_global_delete` if there is NEVER an
delete operator call that would triffer the body to be emitted (thus the
empty function should never be called).


    [2 lines not shown]
DeltaFile
+132-4clang/lib/CodeGen/CGClass.cpp
+66-0clang/test/CodeGenCXX/msvc-global-delete-scope-no-dtor.cpp
+63-0clang/test/CodeGenCXX/msvc-global-delete-scalar-array-split.cpp
+54-2clang/test/CodeGenCXX/microsoft-vector-deleting-dtors.cpp
+52-0clang/lib/CodeGen/CodeGenModule.cpp
+48-0clang/test/CodeGenCXX/msvc-no-global-delete-forwarding.cpp
+415-612 files not shown
+500-3218 files

LLVM/project a9a709fclang/include/clang/Sema Scope.h, clang/lib/Parse ParseStmt.cpp

[Clang] [NFC] Use ScopeFlags for expansion statement scopes (#208849)

Previously, we were using a separate `bool` member in `Scope` for this
because we ran out of bits in `ScopeFlags`. #198436 recently freed up a
bit for this, so switch to using it instead.

Fixes #207774.
DeltaFile
+4-16clang/include/clang/Sema/Scope.h
+1-6clang/lib/Parse/ParseStmt.cpp
+1-2clang/lib/Sema/Scope.cpp
+6-243 files

LLVM/project f57ae82clang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers TypeConstrainedPointers.h, clang/lib/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers TypeConstrainedPointers.cpp

[SSAF][PinnedPointers] Add pointer parameters of 'main' as pinned pointers

Similar to some pointer entities of operator new/delete overload
functions, pointer type parameters of the main function shall also
retain its type during clang-reforge transformation.

rdar://179151882
DeltaFile
+27-0clang/unittests/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointersExtractorTest.cpp
+11-0clang/lib/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.cpp
+8-0clang/test/Analysis/Scalable/TypeConstrainedPointers/type-constrained-pointers.cpp
+3-0clang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.h
+49-04 files

LLVM/project 7e89dcfflang/lib/Optimizer/OpenMP MapInfoFinalization.cpp, flang/test/Integration/OpenMP map-types-and-sizes.f90

[Flang][OpenMP] Support mapping of zero-sized arrays (#208133)

Whilst there is no data in theory to map with a zero sized array, the
Fortran OpenMP specification considers the case of a zero sized array
being mapped to device as the data being present on device. This
includes both the data and the descriptor, and it should fundamentlaly
work as a zero-sized array would on device with the respective Fortran
functions for presence and size checking etc.

We can't actually map a nullptr to device and expect it to be present in
current OpenMP (for good reason), however, thankfully, a zero sized
array isn't actually a nullptr, it is a descriptor contianing an
allocated 1-byte of data. So, we can map this to device, alongside the
descriptor and then the zero sized array is correctlly on device for all
intents and purposes. This case is notably different from a
non-allocated or non-zero sized array so we can do this without shooting
ourselves in the foot.
DeltaFile
+66-23mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+16-14flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp
+24-0offload/test/offloading/fortran/map-zero-size-array.f90
+15-5flang/test/Integration/OpenMP/map-types-and-sizes.f90
+6-2mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir
+1-1flang/test/Lower/OpenMP/defaultmap.f90
+128-456 files

LLVM/project 5a73020compiler-rt/test/sanitizer_common/TestCases/Linux dlopen_image_base.c

[compiler-rt] [sanitizer_common] Add a testcase reproducing SIGSEGV in ForEachMappedRegion (#208358)

Likely related to https://github.com/llvm/llvm-project/issues/84482 and
https://github.com/llvm/llvm-project/issues/21068

Assisted-by: Gemini
DeltaFile
+57-0compiler-rt/test/sanitizer_common/TestCases/Linux/dlopen_image_base.c
+57-01 files

LLVM/project a8ba0adllvm/lib/Target/NVPTX NVPTXISelLowering.cpp, llvm/test/CodeGen/NVPTX convert-fp-i128.ll

[NVPTX] Expand fp/int conversions involving integers wider than 64 bits (#201679)

NVPTX does not support direct PTX conversion instructions between
floating point types and integer types wider than 64 bits.

Previously, such conversions could reach instruction selection and fail
with an _unsupported library call operation_ error.
Reproducer on godbolt: https://godbolt.org/z/G6Yr9cE1d

This patch sets the maximum supported fp/int conversion width to 64 bits
so larger conversions are expanded before instruction selection.

It also adds a regression test for 128-bit integer/floating-point
conversions.

Related to #191013

Co-authored-by: Justin Fargnoli <jfargnoli at nvidia.com>
DeltaFile
+849-0llvm/test/CodeGen/NVPTX/convert-fp-i128.ll
+1-0llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
+850-02 files

LLVM/project e54923bclang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers TypeConstrainedPointers.h, clang/lib/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers TypeConstrainedPointers.cpp

remove irrelevant comments
DeltaFile
+0-3clang/lib/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.cpp
+0-3clang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.h
+0-62 files

LLVM/project 55dacffclang/include/clang/ScalableStaticAnalysis/Analyses/OperatorNewDelete OperatorNewDeletePointers.h, clang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers TypeConstrainedPointers.h

[SSAF][NFC] Rename operator new/delete pointers analysis to TypeConstrainedPointers

There will be more such pointer entities that must retain their type
during the clang-reforge transformation. Since they are extracted and
processed similarly, combining them into a single analysis simplifies
maintenance. Therefore, we are using TypeConstrainedPointers as the
umbrella name.
DeltaFile
+0-260clang/unittests/ScalableStaticAnalysis/Analyses/OperatorNewDelete/OperatorNewDeletePointersExtractorTest.cpp
+260-0clang/unittests/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointersExtractorTest.cpp
+259-0clang/lib/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.cpp
+0-258clang/lib/ScalableStaticAnalysis/Analyses/OperatorNewDelete/OperatorNewDeletePointers.cpp
+0-79clang/include/clang/ScalableStaticAnalysis/Analyses/OperatorNewDelete/OperatorNewDeletePointers.h
+78-0clang/include/clang/ScalableStaticAnalysis/Analyses/TypeConstrainedPointers/TypeConstrainedPointers.h
+597-59721 files not shown
+891-89127 files

LLVM/project 3b36c2dllvm/test/Transforms/SLPVectorizer/AMDGPU add_sub_sat-inseltpoison.ll add_sub_sat.ll

AMDGPU: Migrate Analysis/Transforms tests to amdgpu subarch triple (4) (#208812)

Continue migrating command-line target spelling on RUN lines to the
folded amdgpu subarch triple form, covering the remaining Transforms tests in
this group.

Co-Authored-By: Claude <noreply at anthropic.com> (Claude-Opus-4.8)
DeltaFile
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/add_sub_sat-inseltpoison.ll
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/add_sub_sat.ll
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/bswap-inseltpoison.ll
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/bswap.ll
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/min_max.ll
+3-3llvm/test/Transforms/SLPVectorizer/AMDGPU/round-inseltpoison.ll
+18-1830 files not shown
+62-6836 files

LLVM/project ed1e356clang/lib/Driver/ToolChains AMDGPU.cpp, clang/test/Driver amdgpu-openmp-gpu-max-threads-per-block.c

clang/AMDGPU: Remove driver restriction on --gpu-max-threads-per-block (#204864)
DeltaFile
+14-0clang/test/Frontend/openmp-warn-gpu-max-threads-per-block.c
+2-8clang/lib/Driver/ToolChains/AMDGPU.cpp
+6-0clang/test/Driver/amdgpu-openmp-gpu-max-threads-per-block.c
+22-83 files

LLVM/project 4df4330lldb/test/API/functionalities/gdb_remote_client TestXMLRegisterFlags.py TestAArch64XMLRegistersSVEOnly.py, lldb/test/API/linux/aarch64/permission_overlay TestAArch64LinuxPOE.py

[lldb][test] Update whitespace of `register read` in some tests (#208838)

#188049 changed the formatting of `register read` output. A few tests
are failing now due to small space changes.
DeltaFile
+18-18lldb/test/API/linux/aarch64/permission_overlay/TestAArch64LinuxPOE.py
+15-15lldb/test/API/functionalities/gdb_remote_client/TestXMLRegisterFlags.py
+5-5lldb/test/API/functionalities/gdb_remote_client/TestAArch64XMLRegistersSVEOnly.py
+38-383 files

LLVM/project d09048aclang/include/clang/AST StmtCXX.h, clang/lib/Sema SemaExpand.cpp SemaStmt.cpp

[Clang] [C++26] Expansion Statements (P1306R5) (#169680)

This implements C++26's expansion statements, i.e.
[P1306R5](https://wg21.link/P1306R5).

An expansion statement is implemented using a number of new AST
nodes. Since an expansion statement is a template, we need it to be
a dependent DeclContext, but only nodes that inherit from Decl can
be DeclContexts, for which reason this introduces a CXXExpansionStmtDecl.
This holds a synthesised constant template parameter used as the
expansion index as well as a 'CXXExpansionStmtPattern' and a
'CXXExpansionStmtInstantiation.

These two AST nodes are similar to the semantic vs syntactic form
of an InitListExpr: the 'Pattern' represents an unexpanded expansion
statement, and the resulting AST after expansion is stored in an
'Instantiation'.

Since expansion statements require us to perform template instantiation

    [9 lines not shown]
DeltaFile
+1,591-0clang/test/SemaCXX/cxx2c-expansion-stmts.cpp
+1,518-0clang/test/CodeGenCXX/cxx2c-enumerating-expansion-statements.cpp
+643-0clang/lib/Sema/SemaExpand.cpp
+579-0clang/include/clang/AST/StmtCXX.h
+551-0clang/test/CodeGenCXX/cxx2c-iterating-expansion-stmt.cpp
+308-226clang/lib/Sema/SemaStmt.cpp
+5,190-22675 files not shown
+8,569-34981 files