diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-08-29 00:50:38 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-08-29 17:19:03 +0200 |
commit | 766f5f8726965dfe69e70f234a08f6bccedc144e (patch) | |
tree | 3faf414ef540d78219b3e3832a658dc31a7e0e53 /gcc/d/runtime.def | |
parent | 118a559df998051430c2068cfa4e03479c0c85da (diff) | |
download | gcc-766f5f8726965dfe69e70f234a08f6bccedc144e.zip gcc-766f5f8726965dfe69e70f234a08f6bccedc144e.tar.gz gcc-766f5f8726965dfe69e70f234a08f6bccedc144e.tar.bz2 |
d: Call the assertp and boundsp variants for assert and array contract failures.
gcc/d/ChangeLog:
* d-codegen.cc: Include dmd/module.h.
(build_filename_from_loc): New function.
(d_assert_call): Rename to...
(build_assert_call): ...this.
(build_array_bounds_call): Call arrayboundsp variant of the array
bounds failure callback.
(build_bounds_condition): Rename to...
(build_bounds_index_condition): ...this. Update signature.
(build_bounds_slice_condition): New function.
(checkaction_trap_p): New function.
(d_assert_call): Call assertp variant of assert failure callback.
* d-tree.h (class IndexExp): Declare.
(class SliceExp): Declare.
(build_bounds_condition): Remove.
(build_assert_call): Declare.
(build_bounds_index_condition): Declare.
(build_bounds_slice_condition): Declare.
(checkaction_trap_p): Declare.
(d_assert_call): Remove.
* expr.cc (ExprVisitor::visit(IndexExp *)): Call
build_bounds_index_condition.
(ExprVisitor::visit(SliceExp *)): Call build_bounds_slice_condition.
(ExprVisitor::visit(AssertExp *)): Update setting of libcall.
* runtime.cc (enum d_libcall_type): Add LCT_IMMUTABLE_CHARPTR.
(get_libcall_type): Handle LCT_IMMUTABLE_CHARPTR.
* runtime.def (ASSERT): Rename to...
(ASSERTP): ...this. Update signature.
(UNITTEST): Rename to...
(UNITTESTP): ...this. Update signature.
(ARRAY_BOUNDS): Rename to...
(ARRAYBOUNDSP): ...this. Updates signature.
* toir.cc (IRVisitor::visit(SwitchErrorStatement *)): Update call.
Diffstat (limited to 'gcc/d/runtime.def')
-rw-r--r-- | gcc/d/runtime.def | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/gcc/d/runtime.def b/gcc/d/runtime.def index f872cfc..0296233 100644 --- a/gcc/d/runtime.def +++ b/gcc/d/runtime.def @@ -26,27 +26,31 @@ along with GCC; see the file COPYING3. If not see extern(C) - for those that are not, ensure to use correct mangling. */ /* Helper macros for parameter building. */ -#define P0() 0 -#define P1(T1) 1, LCT_ ## T1 -#define P2(T1, T2) 2, LCT_ ## T1, LCT_ ## T2 -#define P3(T1, T2, T3) 3, LCT_ ## T1, LCT_ ## T2, LCT_ ## T3 -#define P4(T1, T2, T3, T4) 4, LCT_ ## T1, LCT_ ## T2, LCT_ ## T3, LCT_ ## T4 -#define RT(T1) LCT_ ## T1 +#define P0() 0 +#define P1(T1) 1, LCT_ ## T1 +#define P2(T1, T2) \ + 2, LCT_ ## T1, LCT_ ## T2 +#define P3(T1, T2, T3) \ + 3, LCT_ ## T1, LCT_ ## T2, LCT_ ## T3 +#define P4(T1, T2, T3, T4) \ + 4, LCT_ ## T1, LCT_ ## T2, LCT_ ## T3, LCT_ ## T4 +#define RT(T1) LCT_ ## T1 /* Used when an assert() contract fails. */ -DEF_D_RUNTIME (ASSERT, "_d_assert", RT(VOID), P2(STRING, UINT), ECF_NORETURN) +DEF_D_RUNTIME (ASSERTP, "_d_assertp", RT(VOID), P2(IMMUTABLE_CHARPTR, UINT), + ECF_NORETURN) DEF_D_RUNTIME (ASSERT_MSG, "_d_assert_msg", RT(VOID), P3(STRING, STRING, UINT), ECF_NORETURN) /* Used when an assert() contract fails in a unittest function. */ -DEF_D_RUNTIME (UNITTEST, "_d_unittest", RT(VOID), P2(STRING, UINT), +DEF_D_RUNTIME (UNITTESTP, "_d_unittestp", RT(VOID), P2(IMMUTABLE_CHARPTR, UINT), ECF_NORETURN) DEF_D_RUNTIME (UNITTEST_MSG, "_d_unittest_msg", RT(VOID), P3(STRING, STRING, UINT), ECF_NORETURN) /* Used when an array index outside the bounds of its range. */ -DEF_D_RUNTIME (ARRAY_BOUNDS, "_d_arraybounds", RT(VOID), P2(STRING, UINT), - ECF_NORETURN) +DEF_D_RUNTIME (ARRAYBOUNDSP, "_d_arrayboundsp", RT(VOID), + P2(IMMUTABLE_CHARPTR, UINT), ECF_NORETURN) /* Used when calling new on a class. */ DEF_D_RUNTIME (NEWCLASS, "_d_newclass", RT(OBJECT), P1(CONST_CLASSINFO), 0) |