https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70875

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Seems like an overzealous assert:

diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index 802341e..080f798 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -302,11 +302,14 @@ ubsan_source_location (location_t loc)
 static unsigned short
 get_ubsan_type_info_for_type (tree type)
 {
-  gcc_assert (TYPE_SIZE (type) && tree_fits_uhwi_p (TYPE_SIZE (type)));
   if (TREE_CODE (type) == REAL_TYPE)
-    return tree_to_uhwi (TYPE_SIZE (type));
+    {
+      gcc_assert (TYPE_SIZE (type) && tree_fits_uhwi_p (TYPE_SIZE (type)));
+      return tree_to_uhwi (TYPE_SIZE (type));
+    }
   else if (INTEGRAL_TYPE_P (type))
     {
+      gcc_assert (TYPE_SIZE (type) && tree_fits_uhwi_p (TYPE_SIZE (type)));
       int prec = exact_log2 (tree_to_uhwi (TYPE_SIZE (type)));
       gcc_assert (prec != -1);
       return (prec << 1) | !TYPE_UNSIGNED (type);

Reply via email to