llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-codegen @llvm/pr-subscribers-clang Author: Kiran (kiran-isaac) <details> <summary>Changes</summary> Fixes #<!-- -->33210 --- Full diff: https://github.com/llvm/llvm-project/pull/178220.diff 2 Files Affected: - (modified) clang/lib/CodeGen/CGExprScalar.cpp (+7) - (added) clang/test/CodeGen/compound-assign-atomic-bool.c (+33) ``````````diff diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 11af497390671..0d92be12959a9 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1591,6 +1591,13 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType, if (DstType->isBooleanType()) return EmitConversionToBool(Src, SrcType); + // Also handle conversions to atomic bools + if (const AtomicType *atomicType = DstType->getAs<AtomicType>()) { + QualType ValueType = atomicType->getValueType(); + if (ValueType->isBooleanType()) + return EmitConversionToBool(Src, ValueType); + } + llvm::Type *DstTy = ConvertType(DstType); // Cast from half through float if half isn't a native type. diff --git a/clang/test/CodeGen/compound-assign-atomic-bool.c b/clang/test/CodeGen/compound-assign-atomic-bool.c new file mode 100644 index 0000000000000..8a39a76788e66 --- /dev/null +++ b/clang/test/CodeGen/compound-assign-atomic-bool.c @@ -0,0 +1,33 @@ +// 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. + +#include <stdatomic.h> +#include <stdbool.h> + + +// 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; +} `````````` </details> https://github.com/llvm/llvm-project/pull/178220 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
