diff options
| author | Hui <hui.xie1990@gmail.com> | 2025-10-19 19:25:00 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-19 19:25:00 +0100 |
| commit | b2574c9dad487be92605316efd929738a5f6d851 (patch) | |
| tree | 024af10a3fd0de1914e560db118e0b267067a705 /clang/lib/AST/ByteCode/Program.cpp | |
| parent | 8b74582591ba22d8e8454efe35c96fa1c393571a (diff) | |
| download | llvm-b2574c9dad487be92605316efd929738a5f6d851.zip llvm-b2574c9dad487be92605316efd929738a5f6d851.tar.gz llvm-b2574c9dad487be92605316efd929738a5f6d851.tar.bz2 | |
[clang] [libc++] fix _Atomic c11 compare exchange does not update expected results (#78707)
fixes #30023
The issue is that for compare exchange builtin, if the type's size is
not power of 2, it creates a temporary of size power of 2, then emit the
compare exchange operation. And later, the results of the compare
exchange operation has two components: 1. a boolean whether or not the
exchange happens. 2. the old value
we are supposed to write the old value into user's "expected" value.
However, in case the type is not power of 2, what we actually wrote to
is the temporary that was created.
The fix is to pass the "expected" address all the way down so it can
wrote to the correct address
Diffstat (limited to 'clang/lib/AST/ByteCode/Program.cpp')
0 files changed, 0 insertions, 0 deletions
