Skip to content

Commit aeff21a

Browse files
committed
add tests
1 parent bd8246e commit aeff21a

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

clang/lib/Sema/SemaAttr.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "CheckExprLifetime.h"
1515
#include "clang/AST/ASTConsumer.h"
1616
#include "clang/AST/Attr.h"
17+
#include "clang/AST/DeclCXX.h"
1718
#include "clang/AST/Expr.h"
1819
#include "clang/Basic/TargetInfo.h"
1920
#include "clang/Lex/Preprocessor.h"
@@ -217,7 +218,10 @@ void Sema::inferGslOwnerPointerAttribute(CXXRecordDecl *Record) {
217218
}
218219

219220
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())
221225
return;
222226

223227
if (unsigned BuiltinID = FD->getBuiltinID()) {

clang/test/Sema/GH126231.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
}

0 commit comments

Comments
 (0)