diff options
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-typeck.c | 12 |
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 |