https://github.com/devajithvs created https://github.com/llvm/llvm-project/pull/159712
https://github.com/llvm/llvm-project/pull/121943 rewrote `__atomic_test_and_set` and `__atomic_clear` to be lowered through AtomicExpr StmtPrinter::VisitAtomicExpr still treated them like other atomic builtins with a Val1 operand. This led to incorrect pretty-printing when dumping the AST. Skip Val1 for these two builtins like atomic loads. >From bb99282f4438c0782b0f156a18e2b7604f78c2f3 Mon Sep 17 00:00:00 2001 From: Devajith Valaparambil Sreeramaswamy <[email protected]> Date: Thu, 18 Sep 2025 17:21:45 +0200 Subject: [PATCH] [Clang][AST] Fix printing for `atomic_test_and_set` and `atomic_clear` https://github.com/llvm/llvm-project/pull/121943 rewrote `__atomic_test_and_set` and `__atomic_clear` to be lowered through AtomicExpr StmtPrinter::VisitAtomicExpr still treated them like other atomic builtins with a Val1 operand. This led to incorrect pretty-printing when dumping the AST. Skip Val1 for these two builtins like atomic loads. --- clang/lib/AST/StmtPrinter.cpp | 4 +++- clang/test/SemaCXX/ast-print.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 0030300521128..8f348f6e5bc73 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -2028,7 +2028,9 @@ void StmtPrinter::VisitAtomicExpr(AtomicExpr *Node) { Node->getOp() != AtomicExpr::AO__atomic_load_n && Node->getOp() != AtomicExpr::AO__scoped_atomic_load_n && Node->getOp() != AtomicExpr::AO__opencl_atomic_load && - Node->getOp() != AtomicExpr::AO__hip_atomic_load) { + Node->getOp() != AtomicExpr::AO__hip_atomic_load && + Node->getOp() != AtomicExpr::AO__atomic_test_and_set && + Node->getOp() != AtomicExpr::AO__atomic_clear) { OS << ", "; PrintExpr(Node->getVal1()); } diff --git a/clang/test/SemaCXX/ast-print.cpp b/clang/test/SemaCXX/ast-print.cpp index 2cb1ec440b6bb..2dc32c20b7296 100644 --- a/clang/test/SemaCXX/ast-print.cpp +++ b/clang/test/SemaCXX/ast-print.cpp @@ -176,6 +176,17 @@ float test15() { return __builtin_asinf(1.0F); } +// CHECK: void test16() { +// CHECK: char *ptr; +// CHECK: __atomic_test_and_set(ptr, 0); +// CHECK: __atomic_clear(ptr, 0); +// CHECK: } +void test16() { + char *ptr; + __atomic_test_and_set(ptr, 0); + __atomic_clear(ptr, 0); +} + namespace PR18776 { struct A { operator void *(); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
