diff options
author | Andi Kleen <ak@linux.intel.com> | 2012-11-09 15:24:25 +0000 |
---|---|---|
committer | Andi Kleen <ak@gcc.gnu.org> | 2012-11-09 15:24:25 +0000 |
commit | ad7bac31307f16060dbb7ce4a36d44698ca2be76 (patch) | |
tree | 7eb028a1a6f1da03283226a754c2f33692bf6666 | |
parent | 962e3ae2aa51b4e2024c6fc3b9bf0ade8c64de7d (diff) | |
download | gcc-ad7bac31307f16060dbb7ce4a36d44698ca2be76.zip gcc-ad7bac31307f16060dbb7ce4a36d44698ca2be76.tar.gz gcc-ad7bac31307f16060dbb7ce4a36d44698ca2be76.tar.bz2 |
Handle target specific memory models in C frontend
get_atomic_generic_size would error out for
__atomic_store(...,__ATOMIC_HLE_RELEASE)
Just mask it out. All the memory orders are checked completely
in builtins.c anyways.
I'm not sure what that check is for, it could be removed in theory.
Passed bootstrap and test suite on x86-64
gcc/c-family/:
2012-11-09 Andi Kleen <ak@linux.intel.com>
PR 55139
* c-common.c (get_atomic_generic_size): Mask with
MEMMODEL_MASK
From-SVN: r193363
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 937fd6d..20ef315 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2012-11-09 Andi Kleen <ak@linux.intel.com> + + PR 55139 + * c-common.c (get_atomic_generic_size): Mask with + MEMMODEL_MASK + 2012-11-07 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/53063 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index c3a6465..7828d21 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -10097,7 +10097,7 @@ get_atomic_generic_size (location_t loc, tree function, VEC(tree,gc) *params) if (TREE_CODE (p) == INTEGER_CST) { int i = tree_low_cst (p, 1); - if (i < 0 || i >= MEMMODEL_LAST) + if (i < 0 || (i & MEMMODEL_MASK) >= MEMMODEL_LAST) { warning_at (loc, OPT_Winvalid_memory_model, "invalid memory model argument %d of %qE", x + 1, |