From 72785f26600ba08db98c6f169e59e66fe09a81f3 Mon Sep 17 00:00:00 2001
From: Marek Polacek <polacek@redhat.com>
Date: Tue, 28 Mar 2017 08:13:04 +0000
Subject: [PATCH] re PR sanitizer/80067 (ICE in fold_comparison with
 -fsanitize=undefined)

	PR sanitizer/80067
	* fold-const.c (fold_comparison): Use protected_set_expr_location
	instead of SET_EXPR_LOCATION.

	* c-c++-common/ubsan/shift-10.c: New test.

From-SVN: r246521
---
 gcc/ChangeLog                               |  6 ++++++
 gcc/fold-const.c                            |  2 +-
 gcc/testsuite/ChangeLog                     |  5 +++++
 gcc/testsuite/c-c++-common/ubsan/shift-10.c | 10 ++++++++++
 4 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/c-c++-common/ubsan/shift-10.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 062afce66690..691785926be6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-28  Marek Polacek  <polacek@redhat.com>
+
+	PR sanitizer/80067
+	* fold-const.c (fold_comparison): Use protected_set_expr_location
+	instead of SET_EXPR_LOCATION.
+
 2017-03-28  Markus Trippelsdorf  <markus@trippelsdorf.de>
 
 	* tree.c (add_expr): Avoid name lookup warning.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 1a9a264fc260..6db16b514f1f 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -8704,7 +8704,7 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
 	      if (save_p)
 		{
 		  tem = save_expr (build2 (code, type, cval1, cval2));
-		  SET_EXPR_LOCATION (tem, loc);
+		  protected_set_expr_location (tem, loc);
 		  return tem;
 		}
 	      return fold_build2_loc (loc, code, type, cval1, cval2);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 086be297bd3d..93c9f9efed49 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-28  Marek Polacek  <polacek@redhat.com>
+
+	PR sanitizer/80067
+	* c-c++-common/ubsan/shift-10.c: New test.
+
 2017-03-27  Jeff Law  <law@redhat.com>
 
 	PR tree-optimization/80216
diff --git a/gcc/testsuite/c-c++-common/ubsan/shift-10.c b/gcc/testsuite/c-c++-common/ubsan/shift-10.c
new file mode 100644
index 000000000000..9202fccc465e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/shift-10.c
@@ -0,0 +1,10 @@
+/* PR sanitizer/80067 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=shift" } */
+
+extern signed char a;
+void
+foo ()
+{
+  0 << ((647 > a) - 1);
+}
-- 
GitLab