diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-01-17 14:52:05 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-01-17 14:52:05 -0800 |
commit | 074e5f54d468730b3719fac72710322170a20535 (patch) | |
tree | 62c1f335e1ac360c32ad57e54677bb5c9a39b2d2 /tests | |
parent | 76ddb8091266741ae046d1b6fdeef4f782617d5b (diff) |
handle atomic operations appearing in libc++
Diffstat (limited to 'tests')
-rw-r--r-- | tests/runner.py | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/tests/runner.py b/tests/runner.py index d0056400..6db5aaf3 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -3820,33 +3820,29 @@ def process(filename): self.do_run(src, expected) CORRECT_SIGNS = 0 - def test_atomic_builtins(self): # XXX TODO + def test_atomic(self): src = ''' - type __sync_fetch_and_add (type *ptr, type value, ...) - type __sync_fetch_and_sub (type *ptr, type value, ...) - type __sync_fetch_and_or (type *ptr, type value, ...) - type __sync_fetch_and_and (type *ptr, type value, ...) - type __sync_fetch_and_xor (type *ptr, type value, ...) - type __sync_fetch_and_nand (type *ptr, type value, ...) - - type __sync_add_and_fetch (type *ptr, type value, ...) - type __sync_sub_and_fetch (type *ptr, type value, ...) - type __sync_or_and_fetch (type *ptr, type value, ...) - type __sync_and_and_fetch (type *ptr, type value, ...) - type __sync_xor_and_fetch (type *ptr, type value, ...) - type __sync_nand_and_fetch (type *ptr, type value, ...) - - bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...) - type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...) - - __sync_synchronize (...) - - type __sync_lock_test_and_set (type *ptr, type value, ...) - - void __sync_lock_release (type *ptr, ...) - ''' + #include <stdio.h> + int main() { + int x = 10; + int y = __sync_add_and_fetch(&x, 5); + printf("*%d,%d*\\n", x, y); + x = 10; + y = __sync_fetch_and_add(&x, 5); + printf("*%d,%d*\\n", x, y); + x = 10; + y = __sync_lock_test_and_set(&x, 6); + printf("*%d,%d*\\n", x, y); + x = 10; + y = __sync_bool_compare_and_swap(&x, 9, 7); + printf("*%d,%d*\\n", x, y); + y = __sync_bool_compare_and_swap(&x, 10, 7); + printf("*%d,%d*\\n", x, y); + return 0; + } + ''' - self.do_run(src, 'hello world\n77.\n', + self.do_run(src, '*15,15*\n*15,10*\n*6,10*\n*10,0*\n*7,1*') # libc++ tests |