Author: Timm Baeder
Date: 2026-07-02T15:44:56+02:00
New Revision: a62d8e068fe04e9edc870f184d7ed635811eb1f1

URL: 
https://github.com/llvm/llvm-project/commit/a62d8e068fe04e9edc870f184d7ed635811eb1f1
DIFF: 
https://github.com/llvm/llvm-project/commit/a62d8e068fe04e9edc870f184d7ed635811eb1f1.diff

LOG: [clang][bytecode] Reject functions with invalid parameters (#207157)

They will just cause problems later when calling them.

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/Context.cpp
    clang/test/AST/ByteCode/cxx23.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/Context.cpp 
b/clang/lib/AST/ByteCode/Context.cpp
index 92a2ba57e08bf..4ca76ce3669d3 100644
--- a/clang/lib/AST/ByteCode/Context.cpp
+++ b/clang/lib/AST/ByteCode/Context.cpp
@@ -680,7 +680,8 @@ const Function *Context::getOrCreateFunction(const 
FunctionDecl *FuncDecl) {
     bool IsConst = PD->getType().isConstQualified();
     bool IsVolatile = PD->getType().isVolatileQualified();
 
-    if (!getASTContext().hasSameType(PD->getType(),
+    if (PD->isInvalidDecl() ||
+        !getASTContext().hasSameType(PD->getType(),
                                      FuncProto->getParamType(ParamIndex)))
       return nullptr;
 

diff  --git a/clang/test/AST/ByteCode/cxx23.cpp 
b/clang/test/AST/ByteCode/cxx23.cpp
index ba7db75a589a1..5607ec9b59cb5 100644
--- a/clang/test/AST/ByteCode/cxx23.cpp
+++ b/clang/test/AST/ByteCode/cxx23.cpp
@@ -268,8 +268,11 @@ namespace ExplicitLambdaInstancePointer {
   };
   constexpr auto b = [](this K) { return 1; }; // all20-error {{explicit 
object parameters are incompatible with C++ standards before C++2b}} \
                                                // all-error {{unknown type 
name 'K'}}
-  constexpr int (*fp)(K) = b; // all-error {{unknown type name 'K'}}
-  static_assert(fp(1) == 1, ""); // expected-error {{not an integral constant 
expression}}
+  constexpr int (*fp)(K) = b; // all-error {{unknown type name 'K'}} \
+                              // expected-error {{must be initialized by a 
constant expression}} \
+                              // expected-note {{declared here}}
+  static_assert(fp(1) == 1, ""); // expected-error {{not an integral constant 
expression}} \
+                                 // expected-note {{initializer of 'fp' is not 
a constant expression}}
 }
 
 namespace TwosComplementShifts {
@@ -658,4 +661,10 @@ namespace BrokenShuffleVector {
   constexpr __m128 kf1{1.0f, 2.0f, 3.0f, 4.0f};
   constexpr __m128 v_mm_cvtps_pd = _mm_cvtps_pd(kf1); // all-error {{must be 
initialized by a constant expression}}
 }
+
+namespace BrokenExplicitInstanceParam {
+  auto b = [](this C) { return 1; }; // all-error {{unknown type name 'C'}}
+  static_assert( (&decltype(b)::operator())(1) == 1); // expected-error {{not 
an integral constant expression}}
+}
+
 #endif


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

Reply via email to