]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Look for a relation between operands only when possible.
authorAndrew MacLeod <amacleod@redhat.com>
Thu, 23 Sep 2021 13:32:00 +0000 (09:32 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Thu, 23 Sep 2021 16:56:43 +0000 (12:56 -0400)
Do not look for a relation between 2 operands if there is no range-ops handler.

gcc/
PR tree-optimization/102463
* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): If
there is no range-ops handler, don't look for a relation.

gcc/testsuite/
* gcc.dg/pr102463.c: New.

gcc/gimple-range-fold.cc
gcc/testsuite/gcc.dg/pr102463.c [new file with mode: 0644]

index 35324fd72c2c5bc61ecdfb06701fe5c727c6e722..bb09b751a4e628749131e898c78c42fc470396ea 100644 (file)
@@ -1358,6 +1358,10 @@ fold_using_range::relation_fold_and_or (irange& lhs_range, gimple *s,
   range_operator *handler1 = gimple_range_handler (SSA_NAME_DEF_STMT (ssa1));
   range_operator *handler2 = gimple_range_handler (SSA_NAME_DEF_STMT (ssa2));
 
+  // If either handler is not present, no relation is found.
+  if (!handler1 || !handler2)
+    return;
+
   int_range<2> bool_one (boolean_true_node, boolean_true_node);
 
   relation_kind relation1 = handler1->op1_op2_relation (bool_one);
diff --git a/gcc/testsuite/gcc.dg/pr102463.c b/gcc/testsuite/gcc.dg/pr102463.c
new file mode 100644 (file)
index 0000000..ca63f0b
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+_Bool _bfd_elf_merge_symbol_h, _bfd_elf_merge_symbol_h_1;
+_Bool _bfd_elf_merge_symbol_olddef;
+_Bool bfd_is_com_section();
+
+void
+_bfd_elf_merge_symbol() {
+  _Bool newdef = bfd_is_com_section(), ntdef, tdef;
+  _bfd_elf_merge_symbol_olddef = _bfd_elf_merge_symbol_h;
+  if (_bfd_elf_merge_symbol_h_1) {
+    ntdef = newdef;
+    tdef = _bfd_elf_merge_symbol_h;
+  } else {
+    ntdef = _bfd_elf_merge_symbol_h;
+    tdef = newdef;
+  }
+  if (tdef && ntdef)
+    ;
+}