Jump to page: 1 2
Thread overview
[Bug 69] gcc.builtins should be nothrow, pure and probably @safe
[Bug 69] core.builtins should be nothrow, pure and probably @safe
Jul 05, 2013
Marco.Leise@gmx.de
Jul 05, 2013
Iain Buclaw
Jul 05, 2013
Marco.Leise@gmx.de
Jul 05, 2013
Marco.Leise@gmx.de
Jul 05, 2013
Iain Buclaw
Jul 05, 2013
Marco.Leise@gmx.de
Jul 09, 2013
Iain Buclaw
Jul 09, 2013
Iain Buclaw
Jul 09, 2013
Iain Buclaw
Jul 09, 2013
Iain Buclaw
Jul 09, 2013
Marco.Leise@gmx.de
Jul 09, 2013
Iain Buclaw
Jul 09, 2013
Iain Buclaw
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #1 from Marco.Leise@gmx.de 2013-07-05 09:42:18 UTC ---
pure is working already. I overlooked that.

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #2 from Iain Buclaw <ibuclaw@gdcproject.org> 2013-07-05 10:02:19 UTC ---
The most likely sequence of events were that gdc support was added first (we were there first, what can I say? :) - then dmd support once its vector support stabilised.  Some time during or after dmd support was put on, pure: nothrow: @safe: was put into the module.

In any case, nothing has changed since std.simd was first brewed. Function purity/nothrow is never assumed, and can only go off what the built-in function symbol is marked as.  Likewise with @safe, the compiler currently only determines whether to @trust a built-in function or not depending on if it has been marked as nothrow.  Which is an interesting, and probably wrong way of inferring @safe-ty, but I suppose in one aspect no one has maybe tested it enough to find any holes in it yet.  It seems safe is never a good assumption to make. :)


We could guarantee @safe-ty for builtin functions that are intrinsically expanded by the compiler (have no equivalent library call).  Will have to think about whether to assume pure/nothrow in that situation also.

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #3 from Marco.Leise@gmx.de 2013-07-05 10:13:35 UTC ---
(In reply to comment #2)
> We could guarantee @safe-ty for builtin functions that are intrinsically expanded by the compiler (have no equivalent library call).  Will have to think about whether to assume pure/nothrow in that situation also.

I hoped for something like that. SIMD intrinsics are typically not much more than an awesome way to express +,-,*,<,>,... They can hardly "throw new Exception();" and can be @trusted. If they couldn't be trusted you might as well flag INC, ADD and MOV as @system ;)

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #4 from Marco.Leise@gmx.de 2013-07-05 10:15:37 UTC ---
In any case nothrow is more important as it cannot easily be contained like @safe by marking stuff @trusted.

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #5 from Iain Buclaw <ibuclaw@gdcproject.org> 2013-07-05 12:38:55 UTC ---
(In reply to comment #3)
> (In reply to comment #2)
> > We could guarantee @safe-ty for builtin functions that are intrinsically expanded by the compiler (have no equivalent library call).  Will have to think about whether to assume pure/nothrow in that situation also.
> 
> I hoped for something like that. SIMD intrinsics are typically not much more than an awesome way to express +,-,*,<,>,... They can hardly "throw new Exception();" and can be @trusted. If they couldn't be trusted you might as well flag INC, ADD and MOV as @system ;)

Well... *cough* - inline assembler is @system, and can not be used in @safe code.

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 05, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #6 from Marco.Leise@gmx.de 2013-07-05 22:17:57 UTC ---
Ok, I'll keep quiet now

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 09, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

Iain Buclaw <ibuclaw@gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|libgdruntime                |gdc

--- Comment #7 from Iain Buclaw <ibuclaw@gdcproject.org> 2013-07-09 20:04:08 UTC ---
Also, not actually a library bug as builtins are compiler generated.

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 09, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

Iain Buclaw <ibuclaw@gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|core.builtins should be     |gcc.builtins should be
                   |nothrow, pure and probably  |nothrow, pure and probably
                   |@safe                       |@safe

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 09, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

Iain Buclaw <ibuclaw@gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

--- Comment #8 from Iain Buclaw <ibuclaw@gdcproject.org> 2013-07-09 20:06:23 UTC ---
https://github.com/D-Programming-GDC/GDC/commit/b39b1a3471bcb4cb6ad7105b4e0f5c1c19bd6c0f

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
July 09, 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=69

--- Comment #9 from Iain Buclaw <ibuclaw@gdcproject.org> 2013-07-09 20:14:15 UTC ---
As a result, all these functions are now listed as pure nothrow @safe  (along with all backend builtins).

// D import file generated from 'builtins.d'
module gcc.builtins;
extern (C)
{
        extern pure nothrow @safe double __builtin_huge_val();
        extern pure nothrow @safe float __builtin_huge_valf();
        extern pure nothrow @safe real __builtin_huge_vall();
        extern pure nothrow @safe int __builtin_iceil(in double);
        extern pure nothrow @safe int __builtin_iceilf(in float);
        extern pure nothrow @safe int __builtin_iceill(in real);
        extern pure nothrow @safe int __builtin_ifloor(in double);
        extern pure nothrow @safe int __builtin_ifloorf(in float);
        extern pure nothrow @safe int __builtin_ifloorl(in real);
        extern pure nothrow @safe double __builtin_inf();
        extern pure nothrow @safe float __builtin_inff();
        extern pure nothrow @safe real __builtin_infl();
        extern pure nothrow @safe float __builtin_infd32();
        extern pure nothrow @safe double __builtin_infd64();
        extern pure nothrow @safe real __builtin_infd128();
        extern pure nothrow @safe int __builtin_irint(in double);
        extern pure nothrow @safe int __builtin_irintf(in float);
        extern pure nothrow @safe int __builtin_irintl(in real);
        extern pure nothrow @safe int __builtin_iround(in double);
        extern pure nothrow @safe int __builtin_iroundf(in float);
        extern pure nothrow @safe int __builtin_iroundl(in real);
        extern pure nothrow @safe long __builtin_lceil(in double);
        extern pure nothrow @safe long __builtin_lceilf(in float);
        extern pure nothrow @safe long __builtin_lceill(in real);
        extern pure nothrow @safe long __builtin_lfloor(in double);
        extern pure nothrow @safe long __builtin_lfloorf(in float);
        extern pure nothrow @safe long __builtin_lfloorl(in real);
        extern pure nothrow @safe long __builtin_llceil(in double);
        extern pure nothrow @safe long __builtin_llceilf(in float);
        extern pure nothrow @safe long __builtin_llceill(in real);
        extern pure nothrow @safe long __builtin_llfloor(in double);
        extern pure nothrow @safe long __builtin_llfloorf(in float);
        extern pure nothrow @safe long __builtin_llfloorl(in real);
        extern pure nothrow @safe float __builtin_nand32(in char*);
        extern pure nothrow @safe double __builtin_nand64(in char*);
        extern pure nothrow @safe real __builtin_nand128(in char*);
        extern pure nothrow @safe double __builtin_nans(in char*);
        extern pure nothrow @safe float __builtin_nansf(in char*);
        extern pure nothrow @safe real __builtin_nansl(in char*);
        extern pure nothrow @safe double __builtin_powi(in double, in int);
        extern pure nothrow @safe float __builtin_powif(in float, in int);
        extern pure nothrow @safe real __builtin_powil(in real, in int);
        extern pure nothrow @safe cdouble __builtin_cexpi(in double);
        extern pure nothrow @safe cfloat __builtin_cexpif(in float);
        extern pure nothrow @safe creal __builtin_cexpil(in real);
        extern pure nothrow @safe void* __builtin_aggregate_incoming_address();
        extern pure nothrow @safe void* __builtin_apply(in void function(), in
void*, in ulong);
        extern pure nothrow @safe void* __builtin_apply_args();
        extern pure nothrow @safe ushort __builtin_bswap16(in ushort);
        extern pure nothrow @safe uint __builtin_bswap32(in uint);
        extern pure nothrow @safe ulong __builtin_bswap64(in ulong);
        extern pure nothrow @safe int __builtin_classify_type();
        extern pure nothrow @safe int __builtin_clz(in uint);
        extern pure nothrow @safe int __builtin_clzimax(in ulong);
        extern pure nothrow @safe int __builtin_clzl(in ulong);
        extern pure nothrow @safe int __builtin_clzll(in ulong);
        extern pure nothrow @safe int __builtin_constant_p();
        extern pure nothrow @safe int __builtin_ctz(in uint);
        extern pure nothrow @safe int __builtin_ctzimax(in ulong);
        extern pure nothrow @safe int __builtin_ctzl(in ulong);
        extern pure nothrow @safe int __builtin_ctzll(in ulong);
        extern pure nothrow @safe int __builtin_clrsb(in int);
        extern pure nothrow @safe int __builtin_clrsbimax(in long);
        extern pure nothrow @safe int __builtin_clrsbl(in long);
        extern pure nothrow @safe int __builtin_clrsbll(in long);
        extern pure nothrow @safe void* __builtin_dwarf_cfa();
        extern pure nothrow @safe uint __builtin_dwarf_sp_column();
        extern pure nothrow @safe void __builtin_eh_return(in long, in void*);
        extern pure nothrow @safe int __builtin_eh_return_data_regno(in int);
        extern pure nothrow @safe long __builtin_expect(in long, in long);
        extern pure nothrow @safe void* __builtin_assume_aligned(in void*, in
ulong, ...);
        extern pure nothrow @safe ulong __builtin_extend_pointer(in void*);
        extern pure nothrow @safe void* __builtin_extract_return_addr(in
void*);
        extern pure nothrow @safe void* __builtin_frame_address(in uint);
        extern pure nothrow @safe void* __builtin_frob_return_addr(in void*);
        extern pure nothrow @safe void __builtin_init_dwarf_reg_size_table(in
void*);
        extern pure nothrow @safe int __builtin_fpclassify(in int, in int, in
int, in int, in int, ...);
        extern pure nothrow @safe int __builtin_isfinite();
        extern pure nothrow @safe int __builtin_isinf_sign();
        extern pure nothrow @safe int __builtin_isnormal();
        extern pure nothrow @safe int __builtin_isgreater();
        extern pure nothrow @safe int __builtin_isgreaterequal();
        extern pure nothrow @safe int __builtin_isless();
        extern pure nothrow @safe int __builtin_islessequal();
        extern pure nothrow @safe int __builtin_islessgreater();
        extern pure nothrow @safe int __builtin_isunordered();
        extern pure nothrow @safe void __builtin_longjmp(in void*, in int);
        extern pure nothrow @safe void* __builtin_next_arg();
        extern pure nothrow @safe int __builtin_parity(in uint);
        extern pure nothrow @safe int __builtin_parityimax(in ulong);
        extern pure nothrow @safe int __builtin_parityl(in ulong);
        extern pure nothrow @safe int __builtin_parityll(in ulong);
        extern pure nothrow @safe int __builtin_popcount(in uint);
        extern pure nothrow @safe int __builtin_popcountimax(in ulong);
        extern pure nothrow @safe int __builtin_popcountl(in ulong);
        extern pure nothrow @safe int __builtin_popcountll(in ulong);
        extern pure nothrow @safe void __builtin_prefetch(in void*, ...);
        extern pure nothrow @safe void __builtin_return(in void*);
        extern pure nothrow @safe void* __builtin_return_address(in uint);
        extern pure nothrow @safe void* __builtin_saveregs();
        extern pure nothrow @safe int __builtin_setjmp(in void*);
        extern pure nothrow @safe void __builtin_trap();
        extern pure nothrow @safe void __builtin_unreachable();
        extern pure nothrow @safe void __builtin_unwind_init();
        extern pure nothrow @safe void __builtin_update_setjmp_buf(in void*, in
int);
        extern pure nothrow @safe void __builtin_va_copy(ref
__va_list_tag[1LU], ref __va_list_tag[1LU]);
        extern pure nothrow @safe void __builtin_va_end(ref
__va_list_tag[1LU]);
        extern pure nothrow @safe void __builtin_va_start(ref
__va_list_tag[1LU], ...);
        extern pure nothrow @safe int __builtin_va_arg_pack();
        extern pure nothrow @safe int __builtin_va_arg_pack_len();
        extern pure nothrow @safe ulong __builtin_object_size(in void*, in
int);
        extern pure nothrow @safe void __cyg_profile_func_enter(in void*, in
void*);
        extern pure nothrow @safe void __cyg_profile_func_exit(in void*, in
void*);
        extern pure nothrow @safe void* __builtin_thread_pointer();
        extern pure nothrow @safe void __builtin_set_thread_pointer(in void*);
        extern pure nothrow @safe char* __builtin_FILE();
        extern pure nothrow @safe char* __builtin_FUNCTION();
        extern pure nothrow @safe int __builtin_LINE();
        extern pure nothrow @safe void __sync_fetch_and_add();
        extern pure nothrow @safe ubyte __sync_fetch_and_add_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_add_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_add_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_add_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_fetch_and_sub();
        extern pure nothrow @safe ubyte __sync_fetch_and_sub_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_sub_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_sub_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_sub_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_fetch_and_or();
        extern pure nothrow @safe ubyte __sync_fetch_and_or_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_or_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_or_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_or_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_fetch_and_and();
        extern pure nothrow @safe ubyte __sync_fetch_and_and_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_and_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_and_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_and_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_fetch_and_xor();
        extern pure nothrow @safe ubyte __sync_fetch_and_xor_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_xor_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_xor_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_xor_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_fetch_and_nand();
        extern pure nothrow @safe ubyte __sync_fetch_and_nand_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_fetch_and_nand_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_fetch_and_nand_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_fetch_and_nand_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_add_and_fetch();
        extern pure nothrow @safe ubyte __sync_add_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_add_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_add_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_add_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_sub_and_fetch();
        extern pure nothrow @safe ubyte __sync_sub_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_sub_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_sub_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_sub_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_or_and_fetch();
        extern pure nothrow @safe ubyte __sync_or_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_or_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_or_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_or_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_and_and_fetch();
        extern pure nothrow @safe ubyte __sync_and_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_and_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_and_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_and_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_xor_and_fetch();
        extern pure nothrow @safe ubyte __sync_xor_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_xor_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_xor_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_xor_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_nand_and_fetch();
        extern pure nothrow @safe ubyte __sync_nand_and_fetch_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_nand_and_fetch_2(in void*, in
ushort);
        extern pure nothrow @safe uint __sync_nand_and_fetch_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_nand_and_fetch_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_bool_compare_and_swap();
        extern pure nothrow @safe bool __sync_bool_compare_and_swap_1(in void*,
in ubyte, in ubyte);
        extern pure nothrow @safe bool __sync_bool_compare_and_swap_2(in void*,
in ushort, in ushort);
        extern pure nothrow @safe bool __sync_bool_compare_and_swap_4(in void*,
in uint, in uint);
        extern pure nothrow @safe bool __sync_bool_compare_and_swap_8(in void*,
in ulong, in ulong);
        extern pure nothrow @safe void __sync_val_compare_and_swap();
        extern pure nothrow @safe ubyte __sync_val_compare_and_swap_1(in void*,
in ubyte, in ubyte);
        extern pure nothrow @safe ushort __sync_val_compare_and_swap_2(in
void*, in ushort, in ushort);
        extern pure nothrow @safe uint __sync_val_compare_and_swap_4(in void*,
in uint, in uint);
        extern pure nothrow @safe ulong __sync_val_compare_and_swap_8(in void*,
in ulong, in ulong);
        extern pure nothrow @safe void __sync_lock_test_and_set();
        extern pure nothrow @safe ubyte __sync_lock_test_and_set_1(in void*, in
ubyte);
        extern pure nothrow @safe ushort __sync_lock_test_and_set_2(in void*,
in ushort);
        extern pure nothrow @safe uint __sync_lock_test_and_set_4(in void*, in
uint);
        extern pure nothrow @safe ulong __sync_lock_test_and_set_8(in void*, in
ulong);
        extern pure nothrow @safe void __sync_lock_release();
        extern pure nothrow @safe void __sync_lock_release_1(in void*);
        extern pure nothrow @safe void __sync_lock_release_2(in void*);
        extern pure nothrow @safe void __sync_lock_release_4(in void*);
        extern pure nothrow @safe void __sync_lock_release_8(in void*);
        extern pure nothrow @safe void __sync_lock_release_16(in void*);
        extern pure nothrow @safe void __sync_synchronize();
        extern pure nothrow @safe bool __atomic_test_and_set(in void*, in int);
        extern pure nothrow @safe void __atomic_clear(in void*, in int);
        extern pure nothrow @safe void __atomic_exchange(in ulong, in void*, in
void*, in void*, in int);
        extern pure nothrow @safe void __atomic_exchange_n();
        extern pure nothrow @safe ubyte __atomic_exchange_1(in void*, in ubyte,
in int);
        extern pure nothrow @safe ushort __atomic_exchange_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_exchange_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_exchange_8(in void*, in ulong,
in int);
        extern pure nothrow @safe void __atomic_load(in ulong, in void*, in
void*, in int);
        extern pure nothrow @safe void __atomic_load_n();
        extern pure nothrow @safe ubyte __atomic_load_1(in void*, in int);
        extern pure nothrow @safe ushort __atomic_load_2(in void*, in int);
        extern pure nothrow @safe uint __atomic_load_4(in void*, in int);
        extern pure nothrow @safe ulong __atomic_load_8(in void*, in int);
        extern pure nothrow @safe bool __atomic_compare_exchange(in ulong, in
void*, in void*, in void*, in int, in int);
        extern pure nothrow @safe void __atomic_compare_exchange_n();
        extern pure nothrow @safe bool __atomic_compare_exchange_1(in void*, in
void*, in ubyte, in bool, in int, in int);
        extern pure nothrow @safe bool __atomic_compare_exchange_2(in void*, in
void*, in ushort, in bool, in int, in int);
        extern pure nothrow @safe bool __atomic_compare_exchange_4(in void*, in
void*, in uint, in bool, in int, in int);
        extern pure nothrow @safe bool __atomic_compare_exchange_8(in void*, in
void*, in ulong, in bool, in int, in int);
        extern pure nothrow @safe void __atomic_store(in ulong, in void*, in
void*, in int);
        extern pure nothrow @safe void __atomic_store_n();
        extern pure nothrow @safe void __atomic_store_1(in void*, in ubyte, in
int);
        extern pure nothrow @safe void __atomic_store_2(in void*, in ushort, in
int);
        extern pure nothrow @safe void __atomic_store_4(in void*, in uint, in
int);
        extern pure nothrow @safe void __atomic_store_8(in void*, in ulong, in
int);
        extern pure nothrow @safe void __atomic_add_fetch();
        extern pure nothrow @safe ubyte __atomic_add_fetch_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_add_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_add_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_add_fetch_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_sub_fetch();
        extern pure nothrow @safe ubyte __atomic_sub_fetch_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_sub_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_sub_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_sub_fetch_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_and_fetch();
        extern pure nothrow @safe ubyte __atomic_and_fetch_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_and_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_and_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_and_fetch_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_nand_fetch();
        extern pure nothrow @safe ubyte __atomic_nand_fetch_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_nand_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_nand_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_nand_fetch_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_xor_fetch();
        extern pure nothrow @safe ubyte __atomic_xor_fetch_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_xor_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_xor_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_xor_fetch_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_or_fetch();
        extern pure nothrow @safe ubyte __atomic_or_fetch_1(in void*, in ubyte,
in int);
        extern pure nothrow @safe ushort __atomic_or_fetch_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_or_fetch_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_or_fetch_8(in void*, in ulong,
in int);
        extern pure nothrow @safe void __atomic_fetch_add();
        extern pure nothrow @safe ubyte __atomic_fetch_add_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_fetch_add_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_add_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_add_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_fetch_sub();
        extern pure nothrow @safe ubyte __atomic_fetch_sub_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_fetch_sub_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_sub_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_sub_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_fetch_and();
        extern pure nothrow @safe ubyte __atomic_fetch_and_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_fetch_and_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_and_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_and_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_fetch_nand();
        extern pure nothrow @safe ubyte __atomic_fetch_nand_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_fetch_nand_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_nand_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_nand_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_fetch_xor();
        extern pure nothrow @safe ubyte __atomic_fetch_xor_1(in void*, in
ubyte, in int);
        extern pure nothrow @safe ushort __atomic_fetch_xor_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_xor_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_xor_8(in void*, in
ulong, in int);
        extern pure nothrow @safe void __atomic_fetch_or();
        extern pure nothrow @safe ubyte __atomic_fetch_or_1(in void*, in ubyte,
in int);
        extern pure nothrow @safe ushort __atomic_fetch_or_2(in void*, in
ushort, in int);
        extern pure nothrow @safe uint __atomic_fetch_or_4(in void*, in uint,
in int);
        extern pure nothrow @safe ulong __atomic_fetch_or_8(in void*, in ulong,
in int);
        extern pure nothrow @safe bool __atomic_always_lock_free(in ulong, in
void*);
        extern pure nothrow @safe bool __atomic_is_lock_free(in ulong, in
void*);
        extern pure nothrow @safe void __atomic_thread_fence(in int);
        extern pure nothrow @safe void __atomic_signal_fence(in int);
}

-- 
Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
« First   ‹ Prev
1 2