https://github.com/zyn0217 created 
https://github.com/llvm/llvm-project/pull/161900

We missed the check of diagnose_if attributes for the constructor templates, 
because we used the template declaration, rather than its templated one.

Also, we can avoid the duplicate constraint checking because it's already 
checked in overload resolution.

>From 3409abb75632687dfc5b15a60fbe635228e93058 Mon Sep 17 00:00:00 2001
From: Younan Zhang <[email protected]>
Date: Sat, 4 Oct 2025 03:48:04 +0800
Subject: [PATCH] [Clang] Use the templated constructor declaration for
 DiagnoseUseOfDecl

We missed the check of diagnose_if attributes for the constructor
templates, because we used the template declaration, rather than
its templated one.

Also, we can avoid the duplicate constraint checking because it's
already checked in overload resolution.
---
 clang/docs/ReleaseNotes.rst                    | 1 +
 clang/lib/Sema/SemaInit.cpp                    | 2 +-
 clang/test/Parser/cxx0x-lambda-expressions.cpp | 2 +-
 clang/test/SemaCXX/lambda-expressions.cpp      | 4 ++++
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index d2e5bd284d350..733a3058f1c9d 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -452,6 +452,7 @@ Bug Fixes to AST Handling
 
 Miscellaneous Bug Fixes
 ^^^^^^^^^^^^^^^^^^^^^^^
+- Fixed missing diagnostics of ``diagnose_if`` on a constructor template 
involved in initialization. (#GH160776)
 
 Miscellaneous Clang Crashes Fixed
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 0d0d2c00eb5d4..2cd34e957a231 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -7539,7 +7539,7 @@ PerformConstructorInitialization(Sema &S,
 
   // Only check access if all of that succeeded.
   S.CheckConstructorAccess(Loc, Constructor, Step.Function.FoundDecl, Entity);
-  if (S.DiagnoseUseOfDecl(Step.Function.FoundDecl, Loc))
+  if (S.DiagnoseUseOfOverloadedDecl(Constructor, Loc))
     return ExprError();
 
   if (const ArrayType *AT = S.Context.getAsArrayType(Entity.getType()))
diff --git a/clang/test/Parser/cxx0x-lambda-expressions.cpp 
b/clang/test/Parser/cxx0x-lambda-expressions.cpp
index f90f8ce27c53e..5b57c7f638e8a 100644
--- a/clang/test/Parser/cxx0x-lambda-expressions.cpp
+++ b/clang/test/Parser/cxx0x-lambda-expressions.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value 
-verify=expected,cxx14ext,cxx17ext,cxx20ext,cxx23ext -std=c++03 
-Wno-c99-designator %s -Wno-c++11-extensions
+// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value 
-verify=expected,cxx14ext,cxx17ext,cxx20ext,cxx23ext -std=c++03 
-Wno-c99-designator %s -Wno-c++11-extensions -Wno-local-type-template-args
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value 
-verify=expected,cxx14ext,cxx17ext,cxx20ext,cxx23ext -std=c++11 
-Wno-c99-designator %s
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value 
-verify=expected,cxx17ext,cxx20ext,cxx23ext          -std=c++14 
-Wno-c99-designator %s
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value 
-verify=expected,cxx20ext,cxx23ext                   -std=c++17 
-Wno-c99-designator %s
diff --git a/clang/test/SemaCXX/lambda-expressions.cpp 
b/clang/test/SemaCXX/lambda-expressions.cpp
index 8ea8e324cf5d2..99c912f732387 100644
--- a/clang/test/SemaCXX/lambda-expressions.cpp
+++ b/clang/test/SemaCXX/lambda-expressions.cpp
@@ -606,8 +606,12 @@ struct S1 {
 
 void foo1() {
   auto s0 = S1([name=]() {}); // expected-error {{expected expression}}
+                                     // cxx03-warning@-1 {{template argument 
uses local type}} \
+                                     // cxx03-note@-1 {{while substituting 
deduced template arguments}}
   auto s1 = S1([name=name]() {}); // expected-error {{use of undeclared 
identifier 'name'; did you mean 'name1'?}}
                                   // cxx03-cxx11-warning@-1 {{initialized 
lambda captures are a C++14 extension}}
+                                  // cxx03-warning@-2 {{template argument uses 
local type}} \
+                                  // cxx03-note@-2 {{while substituting 
deduced template arguments}}
 }
 }
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to