[clang] [Clang] Remove explicit object from non member function. (PR #148807)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 15 02:09:01 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Corentin Jabot (cor3ntin)
<details>
<summary>Changes</summary>
To avoid crashing later (as we assume only member functions can have explicit parameters)
Fixes #<!-- -->113185
---
Full diff: https://github.com/llvm/llvm-project/pull/148807.diff
2 Files Affected:
- (modified) clang/lib/Sema/SemaType.cpp (+3-1)
- (modified) clang/test/SemaCXX/cxx2b-deducing-this.cpp (+10)
``````````diff
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 661746731fdcc..bb114aff2366b 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -4860,7 +4860,9 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
S.Diag(First->getBeginLoc(),
diag::err_explicit_object_parameter_invalid)
<< First->getSourceRange();
-
+ // Do let non-member function have explicit parameters
+ // to not break assumptions elsewhere in the code.
+ First->setExplicitObjectParameterLoc(SourceLocation());
D.setInvalidType();
AreDeclaratorChunksValid = false;
}
diff --git a/clang/test/SemaCXX/cxx2b-deducing-this.cpp b/clang/test/SemaCXX/cxx2b-deducing-this.cpp
index 6987d0c020457..2253cbb26285e 100644
--- a/clang/test/SemaCXX/cxx2b-deducing-this.cpp
+++ b/clang/test/SemaCXX/cxx2b-deducing-this.cpp
@@ -1347,3 +1347,13 @@ int main() {
// expected-note@#S3-f-cand2 {{candidate function not viable: no known conversion from 'S3' to 'int' for object argument}}
}
}
+
+namespace GH113185 {
+
+void Bar(this int) { // expected-note {{candidate function}}
+ // expected-error at -1 {{an explicit object parameter cannot appear in a non-member function}}
+ Bar(0);
+ Bar(); // expected-error {{no matching function for call to 'Bar'}}
+}
+
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/148807
More information about the cfe-commits
mailing list