aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2012-11-09 15:24:25 +0000
committerAndi Kleen <ak@gcc.gnu.org>2012-11-09 15:24:25 +0000
commitad7bac31307f16060dbb7ce4a36d44698ca2be76 (patch)
tree7eb028a1a6f1da03283226a754c2f33692bf6666 /gcc
parent962e3ae2aa51b4e2024c6fc3b9bf0ade8c64de7d (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-common.c2
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,