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;
-}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to