Current implementation of the synchronization builtins in gcc (from http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/intref_cls/common/intref_itanium_synchro_prim.htm) describe <type> as unsigned. although it is stated as "<type> is either a 32-bit or 64-bit integer"
consequently, testsuite tests such as sync-2.c:
if (__sync_sub_and_fetch(AI+13, 12) != (char)-12)
might fail. (unless the target/runtime dependant primitive implementation artificially change the return type).
Created attachment 18758 [details]
Fix synchronisation parameter/output signess
The attached patch gives the correct semantic. But should be checked on target using them (pa/arm) for possible legacy regression.
(tested on SH with a non-linux, in house runtime, implementation)
2009-10-08 Christian Bruel <email@example.com>
* builtin-types.def (BT_I[1,2,4,8,16): Set signed.
Mis-categorized as a treelang bug (?!).
rth, you added these primitive types and the _sync_* builtins... Could you have a look at this bug and at the patch of comment #1, please?