diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ffc2d26d6fb..ed569e481b2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
+
+	* dwarf2out.c (loc_descriptor): Punt for MODE_VECTOR_BOOL.
+	(add_const_value_attribute): Likewise.
+
 2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
 
 	* tree-vect-loop.c (vect_create_epilog_for_reduction): When
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 6fb345b38b0..ff55e3969b1 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -16763,7 +16763,12 @@ loc_descriptor (rtx rtl, machine_mode mode,
       if (mode == VOIDmode)
 	mode = GET_MODE (rtl);
 
-      if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
+      if (mode != VOIDmode
+	  /* The combination of a length and byte elt_size doesn't extend
+	     naturally to boolean vectors, where several elements are packed
+	     into the same byte.  */
+	  && GET_MODE_CLASS (mode) != MODE_VECTOR_BOOL
+	  && (dwarf_version >= 4 || !dwarf_strict))
 	{
 	  unsigned int length;
 	  if (!CONST_VECTOR_NUNITS (rtl).is_constant (&length))
@@ -19622,6 +19627,12 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
 	  return false;
 
 	machine_mode mode = GET_MODE (rtl);
+	/* The combination of a length and byte elt_size doesn't extend
+	   naturally to boolean vectors, where several elements are packed
+	   into the same byte.  */
+	if (GET_MODE_CLASS (mode) == MODE_VECTOR_BOOL)
+	  return false;
+
 	unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
 	unsigned char *array
 	  = ggc_vec_alloc<unsigned char> (length * elt_size);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5020620fc4d..389fb25fd40 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
+
+	* gcc.target/aarch64/sve/acle/general/debug_4.c: New test.
+
 2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
 
 	* gcc.target/aarch64/sve/clastb_9.c: New test.
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/debug_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/debug_4.c
new file mode 100644
index 00000000000..5707cc229d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/debug_4.c
@@ -0,0 +1,16 @@
+/* { dg-options "-O -g -msve-vector-bits=512" } */
+
+#include <arm_sve.h>
+
+void __attribute__((noipa))
+g (volatile int *x, svbool_t pg)
+{
+  *x = 1;
+}
+
+void
+f (volatile int *x)
+{
+  svbool_t pg = svorr_z (svpfalse (), svpfalse (), svpfalse ());
+  g (x, pg);
+}