From: Marek Polacek Date: Tue, 20 Jan 2015 14:19:35 +0000 (+0000) Subject: backport: re PR c/61553 (__atomic_store with non-pointer arg ICE) X-Git-Tag: releases/gcc-4.8.5~318 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1142cd286a1643684167c153ead9a3c08acf6c05;p=thirdparty%2Fgcc.git backport: re PR c/61553 (__atomic_store with non-pointer arg ICE) Backport from mainline 2014-06-23 Marek Polacek PR c/61553 * c-common.c (get_atomic_generic_size): Don't segfault if the type doesn't have a size. * c-c++-common/pr61553.c: New test. From-SVN: r219897 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index bb4278fe6586..b230bc4a303e 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,12 @@ +2015-01-20 Marek Polacek + + Backport from mainline + 2014-06-23 Marek Polacek + + PR c/61553 + * c-common.c (get_atomic_generic_size): Don't segfault if the + type doesn't have a size. + 2014-12-19 Release Manager * GCC 4.8.4 released. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 86f64ec60e80..f41ec9ca8896 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -10143,7 +10143,8 @@ get_atomic_generic_size (location_t loc, tree function, function); return 0; } - size = tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (type)), 1); + tree type_size = TYPE_SIZE_UNIT (TREE_TYPE (type)); + size = type_size ? tree_low_cst (type_size, 1) : 0; if (size != size_0) { error_at (loc, "size mismatch in argument %d of %qE", x + 1, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 30f131ca76fc..fde23519a363 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-01-20 Marek Polacek + + Backport from mainline + 2014-06-23 Marek Polacek + + PR c/61553 + * c-c++-common/pr61553.c: New test. + 2015-01-12 Janus Weil Backport from mainline diff --git a/gcc/testsuite/c-c++-common/pr61553.c b/gcc/testsuite/c-c++-common/pr61553.c new file mode 100644 index 000000000000..8a3b699ee703 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr61553.c @@ -0,0 +1,8 @@ +/* PR c/61553 */ +/* { dg-do compile } */ + +void +foo (char *s) +{ + __atomic_store (s, (void *) 0, __ATOMIC_SEQ_CST); /* { dg-error "size mismatch" } */ +}