On 04/10/2016 07:14 PM, Martin Sebor wrote:
+         if (TREE_CODE (type) == ARRAY_TYPE
+             && variably_modified_type_p (type, NULL_TREE)
+             && !processing_template_decl)
+           {
+             /* Statically check for overflow in VLA bounds and build
+                an expression that checks at runtime whether the VLA
+                is erroneous due to invalid (runtime) bounds.
+                Another expression to check for excess initializers
+                is built in build_vec_init.  */

Why do this both in check_initializer and then again in cp_finish_decl right after the call to check_initializer?

+      /* Also check to see if the final array size is zero (the size
+        is unsigned so the earlier overflow check detects negative
+        values as well.  */
+      tree zerocheck = fold_build2 (EQ_EXPR, boolean_type_node,
+                                   vlasize, size_zero_node);

I'm not sure whether we want this, given that GCC allows zero-length arrays in general. As I recall, with the C++14 stuff whether we checked for zero was dependent on flag_iso, though I wasn't particularly happy with that. If you want to check this unconditionally that's fine.

Jason

Reply via email to