Files
Iain Buclaw 8da8c7d337 d: Merge upstream dmd, druntime 4ca4140e58, phobos 454dff14d.
D front-end changes:

	- Import dmd v2.103.0-beta.1.
	- Using `alias this' for classes has been deprecated.
	- The feature `-fpreview=dip25` is now enabled by default.
	- The compile-time traits `isVirtualFunction' and
	  `getVirtualFunctions' have been deprecated.

D runtime changes:

	- Import druntime v2.103.0-beta.1.

Phobos changes:

	- Import phobos v2.103.0-beta.1.
	- Updated unicode grapheme walking updated to conform to Unicode
	  version 15.
	- Improved friendliness of error messages when instantiating
	  `std.algorithm.iteration.joiner' and
	  `std.algorithm.sorting.sort' with wrong inputs.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 4ca4140e58.
	* dmd/VERSION: Bump version to v2.103.0-beta.1.
	* Make-lang.in (D_FRONTEND_OBJS): Add d/errorsink.o.
	* d-ctfloat.cc (CTFloat::sprint): Update signature for new front-end
	interface.
	* d-frontend.cc (getTypeInfoType): Likewise.
	* d-lang.cc (d_handle_option): Remove handling of -fpreview=dip25 and
	-frevert=dip25.
	(d_post_options): Remove enabling of sealed references language
	feature when scoped pointers is enabled.
	* d-tree.h (create_typeinfo): Update signature.
	* decl.cc (DeclVisitor::finish_vtable): Update for new front-end
	interface.
	(DeclVisitor::visit (VarDeclaration *)): Likewise.
	(DeclVisitor::visit (FuncDeclaration *)): Check skipCodegen to see if
	front-end explicitly requested not to generate code.
	* expr.cc (ExprVisitor::visit (NewExp *)): Update for new front-end
	interface.
	* lang.opt (fpreview=dip25): Remove.
	(frevert=dip25): Remove.
	* modules.cc (layout_moduleinfo_fields): Update for new front-end
	interface.
	(layout_moduleinfo): Likewise.
	* runtime.def (NEWCLASS): Remove.
	* toir.cc (IRVisitor::visit (IfStatement *)): Don't generate IR for if
	statement list when condition is `__ctfe'.
	* typeinfo.cc (create_typeinfo): Add generate parameter.
	* types.cc (layout_aggregate_members): Update for new front-end
	interface.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime 4ca4140e58.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add core/factory.d.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 454dff14d.
	* testsuite/libphobos.hash/test_hash.d: Update test.
	* testsuite/libphobos.shared/finalize.d: Update test.
	* libdruntime/core/factory.d: New file.

gcc/testsuite/ChangeLog:

	* gdc.dg/torture/simd23084.d: New test.
	* gdc.dg/torture/simd23085.d: New test.
	* gdc.dg/torture/simd23218.d: New test.
2023-03-16 17:29:57 +01:00

432 lines
8.7 KiB
D

/**
* D header file to interface with the
* $(HTTP pubs.opengroup.org/onlinepubs/9699919799/basedefs/aio.h.html, Posix AIO API).
*
* Copyright: Copyright D Language Foundation 2018.
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Authors: $(HTTPS github.com/darredevil, Alexandru Razvan Caciulescu)
*/
module core.sys.posix.aio;
import core.stdc.config;
import core.sys.posix.signal;
import core.sys.posix.sys.types;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix):
extern (C):
@nogc:
nothrow:
version (CRuntime_Glibc)
{
import core.sys.posix.config;
struct aiocb
{
int aio_fildes;
int aio_lio_opcode;
int aio_reqprio;
void* aio_buf; //volatile
size_t aio_nbytes;
sigevent aio_sigevent;
aiocb* __next_prio;
int __abs_prio;
int __policy;
int __error_code;
ssize_t __return_value;
off_t aio_offset;
ubyte[32] __glibc_reserved;
}
static if (__USE_LARGEFILE64)
{
struct aiocb64
{
int aio_fildes;
int aio_lio_opcode;
int aio_reqprio;
void* aio_buf; //volatile
size_t aio_nbytes;
sigevent aio_sigevent;
aiocb* __next_prio;
int __abs_prio;
int __policy;
int __error_code;
ssize_t __return_value;
off_t aio_offset;
ubyte[32] __glibc_reserved;
}
}
}
else version (CRuntime_Bionic)
{
// Bionic does not define aiocb.
}
else version (CRuntime_Musl)
{
// https://git.musl-libc.org/cgit/musl/tree/include/aio.h
struct aiocb
{
int aio_fildes;
int aio_lio_opcode;
int aio_reqprio;
void* aio_buf; //volatile
size_t aio_nbytes;
sigevent aio_sigevent;
void* __td;
int[2] __lock;
int __err; //volatile
ssize_t __ret;
off_t aio_offset;
void* __next;
void* __prev;
ubyte[32-2*(void*).sizeof] __dummy4;
}
}
else version (CRuntime_UClibc)
{
// UClibc does not implement aiocb.
}
else version (Darwin)
{
struct aiocb
{
int aio_filedes;
off_t aio_offset;
void* aio_buf; // volatile
size_t aio_nbytes;
int reqprio;
sigevent aio_sigevent;
int aio_lio_opcode;
}
}
else version (FreeBSD)
{
struct __aiocb_private
{
long status;
long error;
void* kernelinfo;
}
struct aiocb
{
int aio_fildes;
off_t aio_offset;
void* aio_buf; // volatile
size_t aio_nbytes;
private int[2] __spare;
private void* _spare2__;
int aio_lio_opcode;
int aio_reqprio;
private __aiocb_private _aiocb_private;
sigevent aio_sigevent;
}
version = BSD_Posix;
}
else version (NetBSD)
{
struct aiocb
{
off_t aio_offset;
void* aio_buf; // volatile
size_t aio_nbytes;
int aio_fildes;
int aio_lio_opcode;
int aio_reqprio;
sigevent aio_sigevent;
private int _state;
private int _errno;
private ssize_t _retval;
}
version = BSD_Posix;
}
else version (OpenBSD)
{
// OpenBSD does not define aiocb.
}
else version (DragonFlyBSD)
{
struct aiocb
{
int aio_fildes;
off_t aio_offset;
void* aio_buf; // volatile
size_t aio_nbytes;
sigevent aio_sigevent;
int aio_lio_opcode;
int aio_reqprio;
private int _aio_val;
private int _aio_err;
}
version = BSD_Posix;
}
else version (Solaris)
{
struct aio_result_t
{
ssize_t aio_return;
int aio_errno;
}
struct aiocb
{
int aio_fildes;
void* aio_buf; // volatile
size_t aio_nbytes;
off_t aio_offset;
int aio_reqprio;
sigevent aio_sigevent;
int aio_lio_opcode;
aio_result_t aio_resultp;
int aio_state;
int[1] aio__pad;
}
}
else
static assert(false, "Unsupported platform");
/* Return values of cancelation function. */
version (CRuntime_Glibc)
{
enum
{
AIO_CANCELED,
AIO_NOTCANCELED,
AIO_ALLDONE
}
}
else version (CRuntime_Musl)
{
enum
{
AIO_CANCELED,
AIO_NOTCANCELED,
AIO_ALLDONE
}
}
else version (Darwin)
{
enum
{
AIO_ALLDONE = 0x1,
AIO_CANCELED = 0x2,
AIO_NOTCANCELED = 0x4,
}
}
else version (Solaris)
{
enum
{
AIO_CANCELED,
AIO_ALLDONE,
AIO_NOTCANCELED
}
}
else version (BSD_Posix)
{
enum
{
AIO_CANCELED,
AIO_NOTCANCELED,
AIO_ALLDONE
}
}
/* Operation codes for `aio_lio_opcode'. */
version (CRuntime_Glibc)
{
enum
{
LIO_READ,
LIO_WRITE,
LIO_NOP
}
}
else version (CRuntime_Musl)
{
enum
{
LIO_READ,
LIO_WRITE,
LIO_NOP
}
}
else version (Darwin)
{
enum
{
LIO_NOP = 0x0,
LIO_READ = 0x1,
LIO_WRITE = 0x2,
}
}
else version (Solaris)
{
enum
{
LIO_NOP,
LIO_READ,
LIO_WRITE,
}
}
else version (BSD_Posix)
{
enum
{
LIO_NOP,
LIO_WRITE,
LIO_READ
}
}
/* Synchronization options for `lio_listio' function. */
version (CRuntime_Glibc)
{
enum
{
LIO_WAIT,
LIO_NOWAIT
}
}
else version (CRuntime_Musl)
{
enum
{
LIO_WAIT,
LIO_NOWAIT
}
}
else version (Darwin)
{
enum
{
LIO_NOWAIT = 0x1,
LIO_WAIT = 0x2,
}
}
else version (Solaris)
{
enum
{
LIO_NOWAIT,
LIO_WAIT
}
}
else version (BSD_Posix)
{
enum
{
LIO_NOWAIT,
LIO_WAIT
}
}
/* Functions implementing POSIX AIO. */
version (CRuntime_Glibc)
{
static if (__USE_LARGEFILE64)
{
int aio_read64(aiocb64* aiocbp);
int aio_write64(aiocb64* aiocbp);
int aio_fsync64(int op, aiocb64* aiocbp);
int aio_error64(const(aiocb64)* aiocbp);
ssize_t aio_return64(aiocb64* aiocbp);
int aio_suspend64(const(aiocb64*)* aiocb_list, int nitems, const(timespec)* timeout);
int aio_cancel64(int fd, aiocb64* aiocbp);
int lio_listio64(int mode, const(aiocb64*)* aiocb_list, int nitems, sigevent* sevp);
alias aio_read = aio_read64;
alias aio_write = aio_write64;
alias aio_fsync = aio_fsync64;
alias aio_error = aio_error64;
alias aio_return = aio_return64;
alias aio_suspend = aio_suspend64;
alias aio_cancel = aio_cancel64;
alias lio_listio = lio_listio64;
}
else
{
int aio_read(aiocb* aiocbp);
int aio_write(aiocb* aiocbp);
int aio_fsync(int op, aiocb* aiocbp);
int aio_error(const(aiocb)* aiocbp);
ssize_t aio_return(aiocb* aiocbp);
int aio_suspend(const(aiocb*)* aiocb_list, int nitems, const(timespec)* timeout);
int aio_cancel(int fd, aiocb* aiocbp);
int lio_listio(int mode, const(aiocb*)* aiocb_list, int nitems, sigevent* sevp);
}
}
else version (CRuntime_Bionic)
{
// Bionic does not implement aio.h
}
else version (CRuntime_UClibc)
{
// UClibc does not implement aio.h
}
else version (OpenBSD)
{
// OpenBSD does not implement aio.h
}
else
{
int aio_read(aiocb* aiocbp);
int aio_write(aiocb* aiocbp);
int aio_fsync(int op, aiocb* aiocbp);
int aio_error(const(aiocb)* aiocbp);
ssize_t aio_return(aiocb* aiocbp);
pragma(mangle, muslRedirTime64Mangle!("aio_suspend", "__aio_suspend_time64"))
int aio_suspend(const(aiocb*)* aiocb_list, int nitems, const(timespec)* timeout);
int aio_cancel(int fd, aiocb* aiocbp);
int lio_listio(int mode, const(aiocb*)* aiocb_list, int nitems, sigevent* sevp);
}
/* Functions outside/extending POSIX requirement. */
version (CRuntime_Glibc)
{
static if (_GNU_SOURCE)
{
/* To customize the implementation one can use the following struct. */
struct aioinit
{
int aio_threads;
int aio_num;
int aio_locks;
int aio_usedba;
int aio_debug;
int aio_numusers;
int aio_idle_time;
int aio_reserved;
}
void aio_init(const(aioinit)* init);
}
}
else version (FreeBSD)
{
int aio_waitcomplete(aiocb** aiocb_list, const(timespec)* timeout);
int aio_mlock(aiocb* aiocbp);
}
else version (DragonFlyBSD)
{
int aio_waitcomplete(aiocb** aiocb_list, const(timespec)* timeout);
}