llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Rohan A M (badwriter123)

<details>
<summary>Changes</summary>

## Summary

This PR adds a regression test to ensure that combining lambda capture by copy 
of `*this` with explicit `this` parameters doesn't crash the compiler.

## Background

This test case addresses a crash that occurs in some clang distributions 
(notably Apple clang 17.0.0) when compiling valid C++23 code that combines:
- Lambda capture by copy of `*this` (`[*this]`)  
- Explicit `this` parameter (`this auto`)

## Minimal Reproduction

```cpp
struct S {
  int x;
  auto byval() {
    return [*this](this auto) { return this-&gt;x; };
  }
};
```

This code is valid C++23 but crashes Apple clang 17.0.0 with "Trace/BPT trap: 
5".

## Test Coverage

The test verifies multiple variations:
- Basic `[*this](this auto)` syntax compiles
- Variations with different parameter types (`this auto&amp;&amp;`)
- Using captured members with and without explicit `this-&gt;`
- Complex cases with multiple members and parameters  
- Nested lambda scenarios
- Constexpr usage to verify semantic correctness

## Impact

- ✅ Ensures this valid C++23 pattern continues to work in LLVM clang
- ✅ Provides regression protection against similar crashes
- ✅ No functional changes to the compiler itself
- ✅ Test passes with current LLVM main branch

The syntax is already supported correctly in LLVM mainline, so this is purely a 
regression test to prevent future issues.

---
Full diff: https://github.com/llvm/llvm-project/pull/154057.diff


1 Files Affected:

- (added) clang/test/SemaCXX/lambda-this-capture-crash.cpp (+59) 


``````````diff
diff --git a/clang/test/SemaCXX/lambda-this-capture-crash.cpp 
b/clang/test/SemaCXX/lambda-this-capture-crash.cpp
new file mode 100644
index 0000000000000..6592bf88cab95
--- /dev/null
+++ b/clang/test/SemaCXX/lambda-this-capture-crash.cpp
@@ -0,0 +1,59 @@
+// RUN: %clang_cc1 -std=c++23 -verify -fsyntax-only %s
+
+// Test case for ensuring lambda *this capture with explicit this parameter 
doesn't crash
+// This reproduces a crash that occurs in some clang distributions (e.g., 
Apple clang 17.0.0)
+// when combining lambda capture by copy of *this with explicit this parameters
+
+struct S {
+  int x;
+  auto byval() {
+    // This combination should not crash the compiler
+    return [*this](this auto) { return this->x; }; // expected-no-diagnostics
+  }
+};
+
+// Variation with explicit type and parameter name
+struct S1 {
+  int x;
+  auto byval() {
+    return [*this](this auto&& self) { return this->x; }; // 
expected-no-diagnostics
+  }
+};
+
+// Using captured member without explicit this->
+struct S2 {
+  int x;
+  auto byval() {
+    return [*this](this auto&& self) { return x; }; // expected-no-diagnostics
+  }
+};
+
+// More complex case with multiple members and parameters
+struct S3 {
+  int x;
+  int y;
+  auto complex() {
+    return [*this](this auto&& self, int z) { 
+      return this->x + this->y + z; 
+    }; // expected-no-diagnostics
+  }
+};
+
+// Nested lambda case
+struct S4 {
+  int x;
+  auto nested() {
+    return [*this](this auto&& self) {
+      return [*this](this auto&& inner) { return this->x; };
+    }; // expected-no-diagnostics
+  }
+};
+
+// Test that the code actually compiles and works semantically
+constexpr int test() {
+  S s{ 42 };
+  auto lambda = s.byval();
+  return lambda(); // Should return 42
+}
+
+static_assert(test() == 42); 
\ No newline at end of file

``````````

</details>


https://github.com/llvm/llvm-project/pull/154057
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to