Commit e3793c6f by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/52215 (__atomic_compare_exchange_n for enumeration type changes signature with -m32)

	PR c++/52215
	* c-common.c (sync_resolve_params): Don't decide whether to convert
	or not based on TYPE_SIZE comparison, convert whenever arg_type
	is unsigned INTEGER_TYPE.

	* g++.dg/ext/atomic-1.C: New test.

From-SVN: r184167
parent 9abd5ed9
2012-02-13 Jakub Jelinek <jakub@redhat.com>
PR c++/52215
* c-common.c (sync_resolve_params): Don't decide whether to convert
or not based on TYPE_SIZE comparison, convert whenever arg_type
is unsigned INTEGER_TYPE.
2012-02-06 Paolo Carlini <paolo.carlini@oracle.com>
PR c/52118
......
/* Subroutines shared by all languages that are variants of C.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of GCC.
......@@ -9336,10 +9336,12 @@ sync_resolve_params (location_t loc, tree orig_function, tree function,
return false;
}
/* Only convert parameters if the size is appropriate with new format
sync routines. */
if (orig_format
|| tree_int_cst_equal (TYPE_SIZE (ptype), TYPE_SIZE (arg_type)))
/* Only convert parameters if arg_type is unsigned integer type with
new format sync routines, i.e. don't attempt to convert pointer
arguments (e.g. EXPECTED argument of __atomic_compare_exchange_n),
bool arguments (e.g. WEAK argument) or signed int arguments (memmodel
kinds). */
if (TREE_CODE (arg_type) == INTEGER_TYPE && TYPE_UNSIGNED (arg_type))
{
/* Ideally for the first conversion we'd use convert_for_assignment
so that we get warnings for anything that doesn't match the pointer
......
2012-02-13 Jakub Jelinek <jakub@redhat.com>
PR c++/52215
* g++.dg/ext/atomic-1.C: New test.
2012-02-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* gcc.c-torture/execute/pr51933.c: Modify for s390 31 bit.
......
// PR c++/52215
// { dg-do compile }
enum E { ZERO };
int
main ()
{
E e = ZERO;
__atomic_compare_exchange_n (&e, &e, e, true, __ATOMIC_ACQ_REL,
__ATOMIC_RELAXED);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment