File tree Expand file tree Collapse file tree 2 files changed +23
-1
lines changed Expand file tree Collapse file tree 2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change 14
14
#include " CheckExprLifetime.h"
15
15
#include " clang/AST/ASTConsumer.h"
16
16
#include " clang/AST/Attr.h"
17
+ #include " clang/AST/DeclCXX.h"
17
18
#include " clang/AST/Expr.h"
18
19
#include " clang/Basic/TargetInfo.h"
19
20
#include " clang/Lex/Preprocessor.h"
@@ -217,7 +218,10 @@ void Sema::inferGslOwnerPointerAttribute(CXXRecordDecl *Record) {
217
218
}
218
219
219
220
void Sema::inferLifetimeBoundAttribute (FunctionDecl *FD) {
220
- if (FD->getNumParams () == 0 || FD->getReturnType ()->isVoidType ())
221
+ if (FD->getNumParams () == 0 )
222
+ return ;
223
+ // // Skip void returning functions (except constructors).
224
+ if (!isa<CXXConstructorDecl>(FD) && FD->getReturnType ()->isVoidType ())
221
225
return ;
222
226
223
227
if (unsigned BuiltinID = FD->getBuiltinID ()) {
Original file line number Diff line number Diff line change
1
+ // RUN: %clang_cc1 -std=c++20 -Wno-ignored-attributes -Wno-unused-value -verify %s
2
+ // expected-no-diagnostics
3
+ namespace std {
4
+ template <class T >
5
+ constexpr const T& as_const (T&) noexcept ;
6
+
7
+ // We need two declarations to see the error for some reason *shrug*
8
+ template <class T > void as_const (const T&&) noexcept = delete;
9
+ template <class T > void as_const (const T&&) noexcept ;
10
+ }
11
+
12
+ namespace GH126231 {
13
+
14
+ void test () {
15
+ int a = 1 ;
16
+ std::as_const (a);
17
+ }
18
+ }
You can’t perform that action at this time.
0 commit comments