[clang] 56c875a - Revert "[Clang] Fix atomic boolean compound assignment (#33210)" (#180183)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 6 04:48:29 PST 2026
Author: Kiran
Date: 2026-02-06T12:48:23Z
New Revision: 56c875a84231fdf84e9e72aa8bb5766cfe0a734c
URL: https://github.com/llvm/llvm-project/commit/56c875a84231fdf84e9e72aa8bb5766cfe0a734c
DIFF: https://github.com/llvm/llvm-project/commit/56c875a84231fdf84e9e72aa8bb5766cfe0a734c.diff
LOG: Revert "[Clang] Fix atomic boolean compound assignment (#33210)" (#180183)
Reverts llvm/llvm-project#178220
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/CodeGen/CGExprScalar.cpp
Removed:
clang/test/CodeGen/compound-assign-atomic-bool.c
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 1f925419432bb..24d4e07ca68b3 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -223,9 +223,6 @@ Improvements to Coverage Mapping
Bug Fixes in This Version
-------------------------
-
-- Fixed atomic boolean compound assignment; the conversion back to atomic bool would be miscompiled. (#GH33210)
-
- Fixed a failed assertion in the preprocessor when ``__has_embed`` parameters are missing parentheses. (#GH175088)
- Fix lifetime extension of temporaries in for-range-initializers in templates. (#GH165182)
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index 1f9389660e127..d21e017bd2b56 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -4035,14 +4035,9 @@ LValue ScalarExprEmitter::EmitCompoundAssignLValue(
if (LHSLV.isBitField()) {
Previous = Result;
Result = EmitScalarConversion(Result, PromotionTypeCR, LHSTy, Loc);
- } else if (const auto *atomicTy = LHSTy->getAs<AtomicType>()) {
- Result =
- EmitScalarConversion(Result, PromotionTypeCR, atomicTy->getValueType(),
- Loc, ScalarConversionOpts(CGF.SanOpts));
- } else {
+ } else
Result = EmitScalarConversion(Result, PromotionTypeCR, LHSTy, Loc,
ScalarConversionOpts(CGF.SanOpts));
- }
if (atomicPHI) {
llvm::BasicBlock *curBlock = Builder.GetInsertBlock();
diff --git a/clang/test/CodeGen/compound-assign-atomic-bool.c b/clang/test/CodeGen/compound-assign-atomic-bool.c
deleted file mode 100644
index 4e8f351b49b81..0000000000000
--- a/clang/test/CodeGen/compound-assign-atomic-bool.c
+++ /dev/null
@@ -1,29 +0,0 @@
-// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
-
-// When performing compound assignment on atomic_bool, ensure that we
-// correctly handle the conversion from integer to boolean, by comparing
-// with zero rather than truncating.
-
-// CHECK: @compund_assign_add
-int compund_assign_add(void) {
- _Atomic _Bool b;
-
- b += 2;
- // CHECK: add
- // CHECK-NEXT: icmp ne
- // CHECK-NEXT: zext
- // CHECK-NEXT: cmpxchg
- return b;
-}
-
-// CHECK: @compund_assign_minus
-int compund_assign_minus(void) {
- _Atomic _Bool b;
-
- b -= 2;
- // CHECK: sub
- // CHECK-NEXT: icmp ne
- // CHECK-NEXT: zext
- // CHECK-NEXT: cmpxchg
- return b;
-}
More information about the cfe-commits
mailing list