From: Andi Kleen <a...@linux.intel.com> Non constant memory models drop HLE attribute bits. Since we had problems with this even in gcc code itself, like libstdc++ <atomic> passing variables when not optimizing, add a warning for this case.
Passed bootstrap and test on x86_64-linux. gcc/: 2013-03-15 Andi Kleen <a...@my.domain.org> PR target/55947 * gcc/builtins.c (get_memmodel): Warn for non constant memory model. --- gcc/builtins.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/builtins.c b/gcc/builtins.c index 68b6a2c..c4efc4c 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -5280,10 +5280,14 @@ get_memmodel (tree exp) rtx op; unsigned HOST_WIDE_INT val; - /* If the parameter is not a constant, it's a run time value so we'll just - convert it to MEMMODEL_SEQ_CST to avoid annoying runtime checking. */ + /* Warn about non constant memory models, as we drop target specific + bits (like HLE). */ if (TREE_CODE (exp) != INTEGER_CST) - return MEMMODEL_SEQ_CST; + { + warning (OPT_Winvalid_memory_model, + "Non constant memory model: Assuming __ATOMIC_SEQ_CST"); + return MEMMODEL_SEQ_CST; + } op = expand_normal (exp); -- 1.7.10.4