Make the pointer arguments to the __sync_* builtins pointers to

volatile-qualified types. Fixes <rdar://problem/8228293>.

llvm-svn: 109618
This commit is contained in:
Douglas Gregor 2010-07-28 18:42:27 +00:00
parent 0ff2c110ad
commit 45bd34a104
2 changed files with 70 additions and 64 deletions

View File

@ -368,75 +368,75 @@ BUILTIN(__builtin_alloca, "v*z" , "n")
// long long -> i64.
BUILTIN(__sync_fetch_and_add, "v.", "")
BUILTIN(__sync_fetch_and_add_1, "cc*c.", "n")
BUILTIN(__sync_fetch_and_add_2, "ss*s.", "n")
BUILTIN(__sync_fetch_and_add_4, "ii*i.", "n")
BUILTIN(__sync_fetch_and_add_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_fetch_and_add_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_fetch_and_add_1, "ccD*c.", "n")
BUILTIN(__sync_fetch_and_add_2, "ssD*s.", "n")
BUILTIN(__sync_fetch_and_add_4, "iiD*i.", "n")
BUILTIN(__sync_fetch_and_add_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_fetch_and_add_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_fetch_and_sub, "v.", "")
BUILTIN(__sync_fetch_and_sub_1, "cc*c.", "n")
BUILTIN(__sync_fetch_and_sub_2, "ss*s.", "n")
BUILTIN(__sync_fetch_and_sub_4, "ii*i.", "n")
BUILTIN(__sync_fetch_and_sub_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_fetch_and_sub_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_fetch_and_sub_1, "ccD*c.", "n")
BUILTIN(__sync_fetch_and_sub_2, "ssD*s.", "n")
BUILTIN(__sync_fetch_and_sub_4, "iiD*i.", "n")
BUILTIN(__sync_fetch_and_sub_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_fetch_and_sub_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_fetch_and_or, "v.", "")
BUILTIN(__sync_fetch_and_or_1, "cc*c.", "n")
BUILTIN(__sync_fetch_and_or_2, "ss*s.", "n")
BUILTIN(__sync_fetch_and_or_4, "ii*i.", "n")
BUILTIN(__sync_fetch_and_or_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_fetch_and_or_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_fetch_and_or_1, "ccD*c.", "n")
BUILTIN(__sync_fetch_and_or_2, "ssD*s.", "n")
BUILTIN(__sync_fetch_and_or_4, "iiD*i.", "n")
BUILTIN(__sync_fetch_and_or_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_fetch_and_or_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_fetch_and_and, "v.", "")
BUILTIN(__sync_fetch_and_and_1, "cc*c.", "n")
BUILTIN(__sync_fetch_and_and_2, "ss*s.", "n")
BUILTIN(__sync_fetch_and_and_4, "ii*i.", "n")
BUILTIN(__sync_fetch_and_and_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_fetch_and_and_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_fetch_and_and_1, "ccD*c.", "n")
BUILTIN(__sync_fetch_and_and_2, "ssD*s.", "n")
BUILTIN(__sync_fetch_and_and_4, "iiD*i.", "n")
BUILTIN(__sync_fetch_and_and_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_fetch_and_and_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_fetch_and_xor, "v.", "")
BUILTIN(__sync_fetch_and_xor_1, "cc*c.", "n")
BUILTIN(__sync_fetch_and_xor_2, "ss*s.", "n")
BUILTIN(__sync_fetch_and_xor_4, "ii*i.", "n")
BUILTIN(__sync_fetch_and_xor_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_fetch_and_xor_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_fetch_and_xor_1, "ccD*c.", "n")
BUILTIN(__sync_fetch_and_xor_2, "ssD*s.", "n")
BUILTIN(__sync_fetch_and_xor_4, "iiD*i.", "n")
BUILTIN(__sync_fetch_and_xor_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_fetch_and_xor_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_add_and_fetch, "v.", "")
BUILTIN(__sync_add_and_fetch_1, "cc*c.", "n")
BUILTIN(__sync_add_and_fetch_2, "ss*s.", "n")
BUILTIN(__sync_add_and_fetch_4, "ii*i.", "n")
BUILTIN(__sync_add_and_fetch_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_add_and_fetch_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_add_and_fetch_1, "ccD*c.", "n")
BUILTIN(__sync_add_and_fetch_2, "ssD*s.", "n")
BUILTIN(__sync_add_and_fetch_4, "iiD*i.", "n")
BUILTIN(__sync_add_and_fetch_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_add_and_fetch_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_sub_and_fetch, "v.", "")
BUILTIN(__sync_sub_and_fetch_1, "cc*c.", "n")
BUILTIN(__sync_sub_and_fetch_2, "ss*s.", "n")
BUILTIN(__sync_sub_and_fetch_4, "ii*i.", "n")
BUILTIN(__sync_sub_and_fetch_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_sub_and_fetch_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_sub_and_fetch_1, "ccD*c.", "n")
BUILTIN(__sync_sub_and_fetch_2, "ssD*s.", "n")
BUILTIN(__sync_sub_and_fetch_4, "iiD*i.", "n")
BUILTIN(__sync_sub_and_fetch_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_sub_and_fetch_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_or_and_fetch, "v.", "")
BUILTIN(__sync_or_and_fetch_1, "cc*c.", "n")
BUILTIN(__sync_or_and_fetch_2, "ss*s.", "n")
BUILTIN(__sync_or_and_fetch_4, "ii*i.", "n")
BUILTIN(__sync_or_and_fetch_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_or_and_fetch_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_or_and_fetch_1, "ccD*c.", "n")
BUILTIN(__sync_or_and_fetch_2, "ssD*s.", "n")
BUILTIN(__sync_or_and_fetch_4, "iiD*i.", "n")
BUILTIN(__sync_or_and_fetch_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_or_and_fetch_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_and_and_fetch, "v.", "")
BUILTIN(__sync_and_and_fetch_1, "cc*c.", "n")
BUILTIN(__sync_and_and_fetch_2, "ss*s.", "n")
BUILTIN(__sync_and_and_fetch_4, "ii*i.", "n")
BUILTIN(__sync_and_and_fetch_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_and_and_fetch_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_and_and_fetch_1, "ccD*c.", "n")
BUILTIN(__sync_and_and_fetch_2, "ssD*s.", "n")
BUILTIN(__sync_and_and_fetch_4, "iiD*i.", "n")
BUILTIN(__sync_and_and_fetch_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_and_and_fetch_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_xor_and_fetch, "v.", "")
BUILTIN(__sync_xor_and_fetch_1, "cc*c.", "n")
BUILTIN(__sync_xor_and_fetch_2, "ss*s.", "n")
BUILTIN(__sync_xor_and_fetch_4, "ii*i.", "n")
BUILTIN(__sync_xor_and_fetch_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_xor_and_fetch_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_xor_and_fetch_1, "ccD*c.", "n")
BUILTIN(__sync_xor_and_fetch_2, "ssD*s.", "n")
BUILTIN(__sync_xor_and_fetch_4, "iiD*i.", "n")
BUILTIN(__sync_xor_and_fetch_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_xor_and_fetch_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_bool_compare_and_swap, "v.", "")
BUILTIN(__sync_bool_compare_and_swap_1, "bcD*cc.", "n")
@ -453,18 +453,18 @@ BUILTIN(__sync_val_compare_and_swap_8, "LLiLLiD*LLiLLi.", "n")
BUILTIN(__sync_val_compare_and_swap_16, "LLLiLLLiD*LLLiLLLi.", "n")
BUILTIN(__sync_lock_test_and_set, "v.", "")
BUILTIN(__sync_lock_test_and_set_1, "cc*c.", "n")
BUILTIN(__sync_lock_test_and_set_2, "ss*s.", "n")
BUILTIN(__sync_lock_test_and_set_4, "ii*i.", "n")
BUILTIN(__sync_lock_test_and_set_8, "LLiLLi*LLi.", "n")
BUILTIN(__sync_lock_test_and_set_16, "LLLiLLLi*LLLi.", "n")
BUILTIN(__sync_lock_test_and_set_1, "ccD*c.", "n")
BUILTIN(__sync_lock_test_and_set_2, "ssD*s.", "n")
BUILTIN(__sync_lock_test_and_set_4, "iiD*i.", "n")
BUILTIN(__sync_lock_test_and_set_8, "LLiLLiD*LLi.", "n")
BUILTIN(__sync_lock_test_and_set_16, "LLLiLLLiD*LLLi.", "n")
BUILTIN(__sync_lock_release, "v.", "")
BUILTIN(__sync_lock_release_1, "vc*.", "n")
BUILTIN(__sync_lock_release_2, "vs*.", "n")
BUILTIN(__sync_lock_release_4, "vi*.", "n")
BUILTIN(__sync_lock_release_8, "vLLi*.", "n")
BUILTIN(__sync_lock_release_16, "vLLLi*.", "n")
BUILTIN(__sync_lock_release_1, "vcD*.", "n")
BUILTIN(__sync_lock_release_2, "vsD*.", "n")
BUILTIN(__sync_lock_release_4, "viD*.", "n")
BUILTIN(__sync_lock_release_8, "vLLiD*.", "n")
BUILTIN(__sync_lock_release_16, "vLLLiD*.", "n")
@ -473,10 +473,10 @@ BUILTIN(__sync_synchronize, "v.", "n")
// LLVM instruction builtin [Clang extension].
BUILTIN(__builtin_llvm_memory_barrier,"vbbbbb", "n")
// GCC does not support these, they are a Clang extension.
BUILTIN(__sync_fetch_and_min, "ii*i", "n")
BUILTIN(__sync_fetch_and_max, "ii*i", "n")
BUILTIN(__sync_fetch_and_umin, "UiUi*Ui", "n")
BUILTIN(__sync_fetch_and_umax, "UiUi*Ui", "n")
BUILTIN(__sync_fetch_and_min, "iiD*i", "n")
BUILTIN(__sync_fetch_and_max, "iiD*i", "n")
BUILTIN(__sync_fetch_and_umin, "UiUiD*Ui", "n")
BUILTIN(__sync_fetch_and_umax, "UiUiD*Ui", "n")
// Random libc builtins.
BUILTIN(__builtin_abort, "v", "Fnr")

View File

@ -84,3 +84,9 @@ void test_unknown_builtin(int a, int b) {
int test13() {
__builtin_eh_return(0, 0); // no warning, eh_return never returns.
}
// <rdar://problem/8228293>
void test14() {
int old;
old = __sync_fetch_and_min((volatile int *)&old, 1);
}