Skip to content

Commit b8d7069

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:2207e3e32549 into amd-gfx:40612bd87e86
Local branch amd-gfx 40612bd Merged main:5ecce45ea298 into amd-gfx:6bc5341daabb Remote branch main 2207e3e [libc++] Set feature-test macro `__cpp_lib_atomic_float` (llvm#127559)
2 parents 40612bd + 2207e3e commit b8d7069

File tree

106 files changed

+2418
-344
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+2418
-344
lines changed

clang/docs/LanguageExtensions.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2629,7 +2629,7 @@ with the current table size.
26292629
.. code-block:: c++
26302630
26312631
typedef void (*__funcref funcref_t)();
2632-
static __funcref table[0];
2632+
static funcref_t table[0];
26332633
26342634
size_t getSize() {
26352635
return __builtin_wasm_table_size(table);
@@ -2651,10 +2651,10 @@ or -1. It will return -1 if not enough space could be allocated.
26512651
.. code-block:: c++
26522652
26532653
typedef void (*__funcref funcref_t)();
2654-
static __funcref table[0];
2654+
static funcref_t table[0];
26552655
26562656
// grow returns the new table size or -1 on error.
2657-
int grow(__funcref fn, int delta) {
2657+
int grow(funcref_t fn, int delta) {
26582658
int prevSize = __builtin_wasm_table_grow(table, fn, delta);
26592659
if (prevSize == -1)
26602660
return -1;

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10606,6 +10606,9 @@ def warn_noreturn_function_has_return_expr : Warning<
1060610606
def warn_falloff_noreturn_function : Warning<
1060710607
"function declared 'noreturn' should not return">,
1060810608
InGroup<InvalidNoreturn>;
10609+
def warn_noreturn_coroutine : Warning<
10610+
"coroutine %0 cannot be declared 'noreturn' as it always returns a coroutine handle">,
10611+
InGroup<InvalidNoreturn>;
1060910612
def err_noreturn_block_has_return_expr : Error<
1061010613
"block declared 'noreturn' should not return">;
1061110614
def err_carries_dependency_missing_on_first_decl : Error<

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20723,9 +20723,19 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
2072320723
case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2072420724
return emitBuiltinWithOneOverloadedType<4>(*this, E,
2072520725
Intrinsic::amdgcn_bitop3);
20726-
case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc:
20727-
return emitBuiltinWithOneOverloadedType<4>(
20728-
*this, E, Intrinsic::amdgcn_make_buffer_rsrc);
20726+
case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
20727+
// TODO: LLVM has this overloaded to allow for fat pointers, but since
20728+
// those haven't been plumbed through to Clang yet, default to creating the
20729+
// resource type.
20730+
SmallVector<Value *, 4> Args;
20731+
for (unsigned I = 0; I < 4; ++I)
20732+
Args.push_back(EmitScalarExpr(E->getArg(I)));
20733+
llvm::PointerType *RetTy = llvm::PointerType::get(
20734+
Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
20735+
Function *F = CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
20736+
{RetTy, Args[0]->getType()});
20737+
return Builder.CreateCall(F, Args);
20738+
}
2072920739
case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2073020740
case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2073120741
case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:

clang/lib/Sema/AnalysisBasedWarnings.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,10 +697,12 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body,
697697
return;
698698
SourceLocation LBrace = Body->getBeginLoc(), RBrace = Body->getEndLoc();
699699
auto EmitDiag = [&](SourceLocation Loc, unsigned DiagID) {
700-
if (IsCoroutine)
701-
S.Diag(Loc, DiagID) << FSI->CoroutinePromise->getType();
702-
else
700+
if (IsCoroutine) {
701+
if (DiagID != 0)
702+
S.Diag(Loc, DiagID) << FSI->CoroutinePromise->getType();
703+
} else {
703704
S.Diag(Loc, DiagID);
705+
}
704706
};
705707

706708
// cpu_dispatch functions permit empty function bodies for ICC compatibility.

clang/lib/Sema/SemaCoroutine.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,10 @@ void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {
11761176
for (AddrLabelExpr *ALE : Fn->AddrLabels)
11771177
Diag(ALE->getBeginLoc(), diag::err_coro_invalid_addr_of_label);
11781178

1179+
// Coroutines always return a handle, so they can't be [[noreturn]].
1180+
if (FD->isNoReturn())
1181+
Diag(FD->getLocation(), diag::warn_noreturn_coroutine) << FD;
1182+
11791183
CoroutineStmtBuilder Builder(*this, *FD, *Fn, Body);
11801184
if (Builder.isInvalid() || !Builder.buildStatements())
11811185
return FD->setInvalidDecl();

clang/lib/Sema/SemaStmt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3910,7 +3910,7 @@ StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
39103910
FnRetType = FD->getReturnType();
39113911
if (FD->hasAttrs())
39123912
Attrs = &FD->getAttrs();
3913-
if (FD->isNoReturn())
3913+
if (FD->isNoReturn() && !getCurFunction()->isCoroutine())
39143914
Diag(ReturnLoc, diag::warn_noreturn_function_has_return_expr) << FD;
39153915
if (FD->isMain() && RetValExp)
39163916
if (isa<CXXBoolLiteralExpr>(RetValExp))

clang/test/CodeGenHIP/builtins-make-buffer-rsrc.hip

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
// CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[STRIDE_ADDR_ASCAST]], align 2
2626
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NUM_ADDR_ASCAST]], align 4
2727
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[FLAGS_ADDR_ASCAST]], align 4
28-
// CHECK-NEXT: [[TMP4:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[TMP0]], i16 [[TMP1]], i32 [[TMP2]], i32 [[TMP3]])
28+
// CHECK-NEXT: [[TMP4:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[TMP0]], i16 [[TMP1]], i32 [[TMP2]], i32 [[TMP3]])
2929
// CHECK-NEXT: ret ptr addrspace(8) [[TMP4]]
3030
//
3131
__device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0(void *p, short stride, int num, int flags) {
@@ -49,7 +49,7 @@ __device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0(void *p, short
4949
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P_ADDR_ASCAST]], align 8
5050
// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NUM_ADDR_ASCAST]], align 4
5151
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[FLAGS_ADDR_ASCAST]], align 4
52-
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[TMP0]], i16 4, i32 [[TMP1]], i32 [[TMP2]])
52+
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[TMP0]], i16 4, i32 [[TMP1]], i32 [[TMP2]])
5353
// CHECK-NEXT: ret ptr addrspace(8) [[TMP3]]
5454
//
5555
__device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_stride_constant(void *p, int num, int flags) {
@@ -73,7 +73,7 @@ __device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_stride_constan
7373
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P_ADDR_ASCAST]], align 8
7474
// CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[STRIDE_ADDR_ASCAST]], align 2
7575
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[FLAGS_ADDR_ASCAST]], align 4
76-
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[TMP0]], i16 [[TMP1]], i32 1234, i32 [[TMP2]])
76+
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[TMP0]], i16 [[TMP1]], i32 1234, i32 [[TMP2]])
7777
// CHECK-NEXT: ret ptr addrspace(8) [[TMP3]]
7878
//
7979
__device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_num_constant(void *p, short stride, int flags) {
@@ -97,7 +97,7 @@ __device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_num_constant(v
9797
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P_ADDR_ASCAST]], align 8
9898
// CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[STRIDE_ADDR_ASCAST]], align 2
9999
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NUM_ADDR_ASCAST]], align 4
100-
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[TMP0]], i16 [[TMP1]], i32 [[TMP2]], i32 5678)
100+
// CHECK-NEXT: [[TMP3:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[TMP0]], i16 [[TMP1]], i32 [[TMP2]], i32 5678)
101101
// CHECK-NEXT: ret ptr addrspace(8) [[TMP3]]
102102
//
103103
__device__ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_flags_constant(void *p, short stride, int num) {

clang/test/CodeGenOpenCL/builtins-amdgcn-make-buffer-rsrc.cl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p0(
66
// CHECK-NEXT: entry:
7-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
7+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
88
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
99
//
1010
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0(void *p, short stride, int num, int flags) {
@@ -13,7 +13,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0(void *p, short stride, in
1313

1414
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p0_stride_constant(
1515
// CHECK-NEXT: entry:
16-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P:%.*]], i16 4, i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
16+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[P:%.*]], i16 4, i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
1717
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
1818
//
1919
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_stride_constant(void *p, int num, int flags) {
@@ -22,7 +22,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_stride_constant(void *p,
2222

2323
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p0_num_constant(
2424
// CHECK-NEXT: entry:
25-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 1234, i32 [[FLAGS:%.*]])
25+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 1234, i32 [[FLAGS:%.*]])
2626
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
2727
//
2828
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_num_constant(void *p, short stride, int flags) {
@@ -31,7 +31,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_num_constant(void *p, sho
3131

3232
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p0_flags_constant(
3333
// CHECK-NEXT: entry:
34-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 5678)
34+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 5678)
3535
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
3636
//
3737
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_flags_constant(void *p, short stride, int num) {
@@ -40,7 +40,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p0_flags_constant(void *p, s
4040

4141
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p1(
4242
// CHECK-NEXT: entry:
43-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
43+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
4444
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
4545
//
4646
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1(global void *p, short stride, int num, int flags) {
@@ -49,7 +49,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1(global void *p, short str
4949

5050
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p1_stride_constant(
5151
// CHECK-NEXT: entry:
52-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p1(ptr addrspace(1) [[P:%.*]], i16 4, i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
52+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p1(ptr addrspace(1) [[P:%.*]], i16 4, i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
5353
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
5454
//
5555
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_stride_constant(global void *p, int num, int flags) {
@@ -58,7 +58,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_stride_constant(global vo
5858

5959
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p1_num_constant(
6060
// CHECK-NEXT: entry:
61-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 1234, i32 [[FLAGS:%.*]])
61+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 1234, i32 [[FLAGS:%.*]])
6262
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
6363
//
6464
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_num_constant(global void *p, short stride, int flags) {
@@ -67,7 +67,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_num_constant(global void
6767

6868
// CHECK-LABEL: @test_amdgcn_make_buffer_rsrc_p1_flags_constant(
6969
// CHECK-NEXT: entry:
70-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 5678)
70+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p1(ptr addrspace(1) [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 5678)
7171
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
7272
//
7373
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_flags_constant(global void *p, short stride, int num) {
@@ -76,7 +76,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_rsrc_p1_flags_constant(global voi
7676

7777
// CHECK-LABEL: @test_amdgcn_make_buffer_p0_nullptr(
7878
// CHECK-NEXT: entry:
79-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr null, i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
79+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr null, i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
8080
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
8181
//
8282
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_p0_nullptr(short stride, int num, int flags) {
@@ -85,7 +85,7 @@ __amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_p0_nullptr(short stride, int num,
8585

8686
// CHECK-LABEL: @test_amdgcn_make_buffer_p1_nullptr(
8787
// CHECK-NEXT: entry:
88-
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p1(ptr addrspace(1) null, i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
88+
// CHECK-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p1(ptr addrspace(1) null, i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 [[FLAGS:%.*]])
8989
// CHECK-NEXT: ret ptr addrspace(8) [[TMP0]]
9090
//
9191
__amdgpu_buffer_rsrc_t test_amdgcn_make_buffer_p1_nullptr(short stride, int num, int flags) {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -Winvalid-noreturn -verify
2+
3+
#include "Inputs/std-coroutine.h"
4+
5+
struct Promise;
6+
7+
struct Awaitable {
8+
bool await_ready();
9+
void await_suspend(std::coroutine_handle<>);
10+
void await_resume();
11+
};
12+
13+
struct Coro : std::coroutine_handle<> {
14+
using promise_type = Promise;
15+
};
16+
17+
struct Promise {
18+
Coro get_return_object();
19+
std::suspend_always initial_suspend() noexcept;
20+
std::suspend_always final_suspend() noexcept;
21+
void return_void();
22+
void unhandled_exception();
23+
};
24+
25+
[[noreturn]] Coro test() { // expected-warning {{coroutine 'test' cannot be declared 'noreturn' as it always returns a coroutine handle}}
26+
co_await Awaitable{};
27+
}
28+
29+
// NO warning here. This could be a regular function returning a `Coro` object.
30+
[[noreturn]] Coro test2();

compiler-rt/test/sanitizer_common/TestCases/Posix/getpass.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// Ignore leaks as this is not the point of test, but HWASAN repors one here.
44
// RUN: %env_tool_opts=detect_leaks=0 %run %t | FileCheck %s
55

6-
// REQUIRES: stable-runtime
76
// XFAIL: android && asan
87

98
// No libutil.

0 commit comments

Comments
 (0)