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

            Bug ID: 102538
           Summary: Wrong narrowing conversion checking for initializer
                    with union
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kito at gcc dot gnu.org
  Target Milestone: ---

How to reproduce:
g++ x.cpp

Testcase:
```
#include <stdint.h>

struct X {
  union {
    uint8_t r8[8];
    uint32_t r32[2];
  };
};

struct ctx {
  X v[1];
};


ctx x = {
  {
     {.r32 = {5,0x33333}},
  }
};
```

Message:
x.cpp:19:1: error: narrowing conversion of '209715' from 'int' to 'uint8_t'
{aka 'unsigned char'} [-Wnarrowing]
   19 | };
      | ^


Work with GCC 11.1 but not work with GCC 11.2 and trunk

Reply via email to