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

--- Comment #58 from Martin Sebor <msebor at gcc dot gnu.org> ---
Jeff's POC also suggests a workaround: changing the type of
_Optional_payload_base::_M_engaged from bool to unsigned char avoids the
VIEW_CONVERT_EXPR and avoids the warning.  The difference in the uninit IL is
below but there's no difference in the assembly.

 {
-  unsigned char maybe_a$4;
+  unsigned char maybe_a$_M_payload$D12141$D11991$_M_engaged;
   int maybe_a$m_val;
   struct optional maybe_b;
   struct optional maybe_a;
-  bool _11;
-  bool _12;
+  unsigned char _11;
   int _29;
-  bool _32;
+  unsigned char _32;

   <bb 2> [local count: 1073741824]:
   maybe_b = {};
@@ -53,7 +52,7 @@

   <bb 9> [count: 0]:
   # maybe_a$m_val_51 = PHI <_29(6), maybe_a$m_val_38(D)(8)>
-  # maybe_a$4_54 = PHI <1(6), 0(8)>
+  # maybe_a$_M_payload$D12141$D11991$_M_engaged_54 = PHI <1(6), 0(8)>
 <L0>:
   _11 = MEM[(struct _Optional_payload_base *)&maybe_b]._M_engaged;
   if (_11 != 0)
@@ -74,8 +73,7 @@

   <bb 12> [count: 0]:
 <L1>:
-  _12 = VIEW_CONVERT_EXPR<bool>(maybe_a$4_54);
-  if (_12 != 0)
+  if (maybe_a$_M_payload$D12141$D11991$_M_engaged_54 != 0)
     goto <bb 13>; [0.00%]
   else
     goto <bb 17>; [0.00%]

Reply via email to