diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 43949894cbed84394317fd262fa994d14da48bdc..c0b8916e85af2a54b000bae4b84f596e0cd4e64b 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -1284,13 +1284,16 @@ ranger_cache::block_range (vrange &r, basic_block bb, tree name, bool calc)
       gimple *def_stmt = SSA_NAME_DEF_STMT (name);
       basic_block def_bb = NULL;
       if (def_stmt)
-	def_bb = gimple_bb (def_stmt);;
+	def_bb = gimple_bb (def_stmt);
       if (!def_bb)
 	{
 	  // If we get to the entry block, this better be a default def
 	  // or range_on_entry was called for a block not dominated by
-	  // the def.  
-	  gcc_checking_assert (SSA_NAME_IS_DEFAULT_DEF (name));
+	  // the def.  But it could be also SSA_NAME defined by a statement
+	  // not yet in the IL (such as queued edge insertion), in that case
+	  // just punt.
+	  if (!SSA_NAME_IS_DEFAULT_DEF (name))
+	    return false;
 	  def_bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
 	}
 
diff --git a/gcc/testsuite/gcc.dg/bitint-110.c b/gcc/testsuite/gcc.dg/bitint-110.c
new file mode 100644
index 0000000000000000000000000000000000000000..4ba2f93856e5c72f91a138c46dddcc574784e5df
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/bitint-110.c
@@ -0,0 +1,20 @@
+/* PR middle-end/116898 */
+/* { dg-do compile { target bitint575 } } */
+/* { dg-options "-O -finstrument-functions -fnon-call-exceptions" } */
+
+_BitInt(127) a;
+_BitInt(511) b;
+
+void
+foo (_BitInt(31) c)
+{
+  do
+    {
+      c %= b;
+again:
+    }
+  while (c);
+  a /= 0;		/* { dg-warning "division by zero" } */
+  c -= a;
+  goto again;
+}