[C11-atomic] Miscellaneous fixes 5/n
Joseph S. Myers
joseph@codesourcery.com
Sat Oct 26 17:06:00 GMT 2013
I've applied this small patch to C11-atomic branch to fix ICEs that
could occur with C_MAYBE_CONST_EXPR through lack of folding.
c:
2013-10-26 Joseph Myers <joseph@codesourcery.com>
* c-typeck.c (build_atomic_assign): Fold RHS if not already
folded.
testsuite:
2013-10-26 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/c11-atomic-1.c: Add more tests.
Index: gcc/testsuite/gcc.dg/c11-atomic-1.c
===================================================================
--- gcc/testsuite/gcc.dg/c11-atomic-1.c (revision 204084)
+++ gcc/testsuite/gcc.dg/c11-atomic-1.c (working copy)
@@ -255,3 +255,13 @@ fc4b (x)
{
}
void fc4b (_Atomic int); /* { dg-warning "follows non-prototype" } */
+
+/* Test cases involving C_MAYBE_CONST_EXPR work. */
+void
+func10 (_Atomic int *p)
+{
+ p[0 / 0] = 1; /* { dg-warning "division by zero" } */
+ p[0 / 0] += 1; /* { dg-warning "division by zero" } */
+ *p = 0 / 0; /* { dg-warning "division by zero" } */
+ *p += 0 / 0; /* { dg-warning "division by zero" } */
+}
Index: gcc/c/c-typeck.c
===================================================================
--- gcc/c/c-typeck.c (revision 204084)
+++ gcc/c/c-typeck.c (working copy)
@@ -11292,6 +11292,10 @@ build_atomic_assign (location_t loc, tree lhs, enu
with a loop. */
compound_stmt = c_begin_compound_stmt (false);
+ /* Fold the RHS if it hasn't already been folded. */
+ if (modifycode != NOP_EXPR)
+ rhs = c_fully_fold (rhs, false, NULL);
+
/* Remove the qualifiers for the rest of the expressions and create
the VAL temp variable to hold the RHS. */
nonatomic_lhs_type = build_qualified_type (lhs_type, TYPE_UNQUALIFIED);
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Gcc-patches
mailing list