diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 1013c08d12b9cd5960d19819613caacdc14d90c2..2591b4c727f8833fa1b8b28b7800ae5717a96a16 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-04  Richard Sandiford  <richard.sandiford@arm.com>
+
+	* d-builtins.cc (build_frontend_type): Cope with variable
+	TYPE_VECTOR_SUBPARTS.
+
 2019-08-23  Jakub Jelinek  <jakub@redhat.com>
 
 	PR middle-end/91283
diff --git a/gcc/d/d-builtins.cc b/gcc/d/d-builtins.cc
index 2f7319c1effb9d7c7351a576b4ed761382b0d458..2ad0f8b87400cd4ad4b5ee806d6117cad093dc9e 100644
--- a/gcc/d/d-builtins.cc
+++ b/gcc/d/d-builtins.cc
@@ -197,20 +197,23 @@ build_frontend_type (tree type)
       break;
 
     case VECTOR_TYPE:
+    {
+      unsigned HOST_WIDE_INT nunits;
+      if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nunits))
+	break;
+
       dtype = build_frontend_type (TREE_TYPE (type));
-      if (dtype)
-	{
-	  poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (type);
-	  dtype = dtype->sarrayOf (nunits.to_constant ())->addMod (mod);
+      if (!dtype)
+	break;
 
-	  if (dtype->nextOf ()->isTypeBasic () == NULL)
-	    break;
+      dtype = dtype->sarrayOf (nunits)->addMod (mod);
+      if (dtype->nextOf ()->isTypeBasic () == NULL)
+	break;
 
-	  dtype = (TypeVector::create (Loc (), dtype))->addMod (mod);
-	  builtin_converted_decls.safe_push (builtin_data (dtype, type));
-	  return dtype;
-	}
-      break;
+      dtype = (TypeVector::create (Loc (), dtype))->addMod (mod);
+      builtin_converted_decls.safe_push (builtin_data (dtype, type));
+      return dtype;
+    }
 
     case RECORD_TYPE:
     {