aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2017-09-15 17:21:50 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2017-09-15 17:21:50 +0000
commit1d9335766d86262f8335d63d99b328bb44543b01 (patch)
tree5e9491b32fa26d79e07318fdf780451f77607b38 /gcc/c
parent4a8ca690b0b73f4e0bae542fd69a1ee0d9e73126 (diff)
downloadgcc-1d9335766d86262f8335d63d99b328bb44543b01.zip
gcc-1d9335766d86262f8335d63d99b328bb44543b01.tar.gz
gcc-1d9335766d86262f8335d63d99b328bb44543b01.tar.bz2
common.opt (Wcast-align=strict): New warning option.
2017-09-15 Bernd Edlinger <bernd.edlinger@hotmail.de> * common.opt (Wcast-align=strict): New warning option. * doc/invoke.texi: Document -Wcast-align=strict. c: 2017-09-15 Bernd Edlinger <bernd.edlinger@hotmail.de> * c-typeck.c (build_c_cast): Implement -Wcast-align=strict. cp: 2017-09-15 Bernd Edlinger <bernd.edlinger@hotmail.de> * typeck.c (build_reinterpret_cast_1, build_const_cast_1): Implement -Wcast-align=strict. testsuite: 2017-09-15 Bernd Edlinger <bernd.edlinger@hotmail.de> * c-c++-common/Wcast-align.c: New test. From-SVN: r252832
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog4
-rw-r--r--gcc/c/c-typeck.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 957daeb..e8e0fb0 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,7 @@
+2017-09-15 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * c-typeck.c (build_c_cast): Implement -Wcast-align=strict.
+
2017-09-13 Marek Polacek <polacek@redhat.com>
PR c/82167
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index f45fd3c..1956d45 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -5578,7 +5578,7 @@ build_c_cast (location_t loc, tree type, tree expr)
}
/* Warn about possible alignment problems. */
- if (STRICT_ALIGNMENT
+ if ((STRICT_ALIGNMENT || warn_cast_align == 2)
&& TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
@@ -5587,7 +5587,8 @@ build_c_cast (location_t loc, tree type, tree expr)
restriction is unknown. */
&& !(RECORD_OR_UNION_TYPE_P (TREE_TYPE (otype))
&& TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
- && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
+ && min_align_of_type (TREE_TYPE (type))
+ > min_align_of_type (TREE_TYPE (otype)))
warning_at (loc, OPT_Wcast_align,
"cast increases required alignment of target type");