middle-end/102269 - avoid auto-init of empty types
authorRichard Biener <rguenther@suse.de>
Fri, 10 Sep 2021 08:17:24 +0000 (10:17 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 10 Sep 2021 09:10:59 +0000 (11:10 +0200)
This avoids initializing empty types for which we'll eventually
leave a .DEFERRED_INIT call without a LHS.

2021-09-10  Richard Biener  <rguenther@suse.de>

PR middle-end/102269
* gimplify.c (is_var_need_auto_init): Empty types do not need
initialization.

* gcc.dg/pr102269.c: New testcase.

gcc/gimplify.c
gcc/testsuite/gcc.dg/pr102269.c [new file with mode: 0644]

index 3314f76..8820f87 100644 (file)
@@ -1826,7 +1826,8 @@ is_var_need_auto_init (tree decl)
 {
   if (auto_var_p (decl)
       && (flag_auto_var_init > AUTO_INIT_UNINITIALIZED)
-      && (!lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl))))
+      && (!lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)))
+      && !is_empty_type (TREE_TYPE (decl)))
     return true;
   return false;
 }
diff --git a/gcc/testsuite/gcc.dg/pr102269.c b/gcc/testsuite/gcc.dg/pr102269.c
new file mode 100644 (file)
index 0000000..9d41b8f
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-ftrivial-auto-var-init=zero" } */
+
+void fn() { int a[0]; }