[clang] [clang] return type not correctly deduced for discarded lambdas (PR #153921)

Oliver Hunt via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 17 16:12:23 PDT 2025


https://github.com/ojhunt updated https://github.com/llvm/llvm-project/pull/153921

>From cee36b9d023f97b55bf01220ccd6f404311db339 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Fri, 15 Aug 2025 21:04:07 -0700
Subject: [PATCH] [clang] return type not correctly deduced for discarded
 lambdas

The early return for lamda expressions with deduced return types
in Sema::ActOnCapScopeReturnStmt meant that we were not actually
perform the required return type deduction for such lambdas when
in a discarded context.

This PR removes that early return allowing the existing return
type deduction steps to be performed.

Fixes #GH153884

Fix developed by and

Co-authored-by: Corentin Jabot <corentinjabot at gmail.com>
---
 .../CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp     | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
index abb42447d3e0b..05830de9891fe 100644
--- a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
@@ -239,5 +239,21 @@ void f2() {
 
 }
 
+namespace GH153884 {
+  bool f1() {
+    auto f = [](auto) { return true; };
+    if constexpr (0)
+      return f(1);
+    return false;
+  }
+  bool f2() {
+    auto f = [](auto x) { if (x) return 1.5; else return "wat"; };
+    // expected-error at -1 {{'auto' in return type deduced as 'const char *' here but deduced as 'double' in earlier return statement}}
+    if constexpr (0)
+      return f(1);
+    // expected-note at -1 {{in instantiation of function template specialization 'GH153884::f2()}}
+    return false;
+  }
+}
 
 #endif



More information about the cfe-commits mailing list