[clang] [clang][ExprConst] Fix second arg of __builtin_{clzg,ctzg} not always being evaluated (PR #86742)

via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 26 14:56:29 PDT 2024


================
@@ -0,0 +1,39 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// expected-no-diagnostics
+
+constexpr int increment(int& x) {
+  x++;
+  return x;
+}
+
+constexpr int test_clzg_0() {
+  int x = 0;
+  [[maybe_unused]] int unused = __builtin_clzg(0U, increment(x));
+  return x;
+}
+
+static_assert(test_clzg_0() == 1);
+
+constexpr int test_clzg_1() {
+  int x = 0;
+  [[maybe_unused]] int unused = __builtin_clzg(1U, increment(x));
+  return x;
+}
+
+static_assert(test_clzg_1() == 1);
+
+constexpr int test_ctzg_0() {
+  int x = 0;
+  [[maybe_unused]] int unused = __builtin_ctzg(0U, increment(x));
+  return x;
+}
+
+static_assert(test_ctzg_0() == 1);
+
+constexpr int test_ctzg_1() {
+  int x = 0;
+  [[maybe_unused]] int unused = __builtin_ctzg(1U, increment(x));
----------------
overmighty wrote:

I can omit `[[maybe_unused]]` but not the whole `[[maybe_unused]] int unused =` part unless I add `// expected-warning ...` comments:

```
~/projects/llvm-project clang-constexpr-builtin-clzg-ctzg-fix* ➜ cmake --build build --target check-clang-sema
[0/1] Running lit suite /home/overmighty/projects/llvm-project/clang/test/Sema
llvm-lit: /home/overmighty/projects/llvm-project/llvm/utils/lit/lit/llvm/config.py:502: note: using clang: /home/overmighty/projects/llvm-project/build/bin/clang
FAIL: Clang :: Sema/constant-builtins-all-args-evaluated.cpp (950 of 981)
******************** TEST 'Clang :: Sema/constant-builtins-all-args-evaluated.cpp' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
RUN: at line 1: /home/overmighty/projects/llvm-project/build/bin/clang -cc1 -internal-isystem /home/overmighty/projects/llvm-project/build/lib/clang/19/include -nostdsysteminc -fsyntax-only -verify /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp
+ /home/overmighty/projects/llvm-project/build/bin/clang -cc1 -internal-isystem /home/overmighty/projects/llvm-project/build/lib/clang/19/include -nostdsysteminc -fsyntax-only -verify /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp
error: 'expected-warning' diagnostics seen but not expected:
  File /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp Line 11: ignoring return value of function declared with const attribute
  File /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp Line 19: ignoring return value of function declared with const attribute
  File /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp Line 27: ignoring return value of function declared with const attribute
  File /home/overmighty/projects/llvm-project/clang/test/Sema/constant-builtins-all-args-evaluated.cpp Line 35: ignoring return value of function declared with const attribute
4 errors generated.

--

********************
********************
Failed Tests (1):
  Clang :: Sema/constant-builtins-all-args-evaluated.cpp


Testing Time: 12.72s

Total Discovered Tests: 981
  Unsupported:  88 (8.97%)
  Passed     : 892 (90.93%)
  Failed     :   1 (0.10%)
FAILED: tools/clang/test/CMakeFiles/check-clang-sema /home/overmighty/projects/llvm-project/build/tools/clang/test/CMakeFiles/check-clang-sema
cd /home/overmighty/projects/llvm-project/build/tools/clang/test && /usr/bin/python3.11 /home/overmighty/projects/llvm-project/build/./bin/llvm-lit -sv --param USE_Z3_SOLVER=0 /home/overmighty/projects/llvm-project/clang/test/Sema
ninja: build stopped: subcommand failed.
~/projects/llvm-project clang-constexpr-builtin-clzg-ctzg-fix* ➜
```

https://github.com/llvm/llvm-project/pull/86742


More information about the cfe-commits mailing list