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

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #3)
> c_sizeof_or_alignof_type has this towards the end:
>   /* VALUE will have the middle-end integer type sizetype.
>      However, we should really return a value of type `size_t',
>      which is just a typedef for an ordinary integer type.  */
>   value = fold_convert_loc (loc, size_type_node, value);
> 
> Which c_countof_type should be added there too.

That is this:
```
[apinski@xeond2 c]$ git diff ../c-family/c-common.cc
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index f2eed033706..fe387725523 100644
--- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc
@@ -4127,7 +4127,12 @@ c_countof_type (location_t loc, tree type)
       return error_mark_node;
     }

-  return array_type_nelts_top (type);
+  tree value = array_type_nelts_top (type);
+  /* VALUE will have the middle-end integer type sizetype.
+     However, we should really return a value of type `size_t',
+     which is just a typedef for an ordinary integer type.  */
+  value = fold_convert_loc (loc, size_type_node, value);
+  return value;
 }
 ^L
 /* Handle C and C++ default attributes.  */

```

Reply via email to