aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2015-12-22 15:23:21 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2015-12-22 15:23:21 +0000
commitfda5652f8fe24f637b29608d12fff72e6df08ba9 (patch)
tree8c5ff4eaa6ca02b1a6b16ad476daf41cbf9fd2a1 /gcc/c
parent5a00b0aaf036edadc48861b91d3804796525c2d5 (diff)
downloadgcc-fda5652f8fe24f637b29608d12fff72e6df08ba9.zip
gcc-fda5652f8fe24f637b29608d12fff72e6df08ba9.tar.gz
gcc-fda5652f8fe24f637b29608d12fff72e6df08ba9.tar.bz2
re PR c/69002 (C front end should warn about undefined access to atomic structure or union)
PR c/69002 * c-typeck.c (build_component_ref): Warn when acessing elements of atomic structures or unions. * gcc.dg/c11-atomic-1.c: Add dg-warnings. * gcc.dg/c11-atomic-4.c: New test. From-SVN: r231902
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-typeck.c12
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index fb9fda3..f99f426 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2015-12-22 Marek Polacek <polacek@redhat.com>
+
+ PR c/69002
+ * c-typeck.c (build_component_ref): Warn when acessing elements of
+ atomic structures or unions.
+
2015-12-21 David Malcolm <dmalcolm@redhat.com>
* c-typeck.c: Include "gcc-rich-location.h".
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index a97774f..928fcd5 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -2349,6 +2349,18 @@ build_component_ref (location_t loc, tree datum, tree component)
return error_mark_node;
}
+ /* Accessing elements of atomic structures or unions is undefined
+ behavior (C11 6.5.2.3#5). */
+ if (TYPE_ATOMIC (type) && c_inhibit_evaluation_warnings == 0)
+ {
+ if (code == RECORD_TYPE)
+ warning_at (loc, 0, "accessing a member %qE of an atomic "
+ "structure %qE", component, datum);
+ else
+ warning_at (loc, 0, "accessing a member %qE of an atomic "
+ "union %qE", component, datum);
+ }
+
/* Chain the COMPONENT_REFs if necessary down to the FIELD.
This might be better solved in future the way the C++ front
end does it - by giving the anonymous entities each a