<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58800>58800</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [16.0.0, 2022-11-02 ToT] Assertion `Field->isUnnamedBitfield() && "Only unnamed bitfields allowed"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hctim
      </td>
    </tr>
</table>

<pre>
    Obviously only reproduces on a build with asserts (`-DLLVM_ENABLE_ASSERTIONS=On`)

This is at HEAD from yesterday (40e99473170f5045e0b5f2cafabd2a1be8c7ec26), but given that this assertion has been sitting around for a while (2009! 5169570e28a55), maybe not a recent regression. I don't have older assert-enabled builds of clang to debug against.

Simple reproducer:

```
struct Foo {
  union {
    struct {
      float red = 0.0f;
    };
  };
};

Foo GetFoo() {
  Foo result{};
  return result;
}
```

```
$ /tmp/aarch64-toolchain/bin/clang++ /tmp/out.cpp -S -o /tmp/out.s -emit-llvm
clang++: /usr/local/google/home/mitchp/llvm/clang/lib/CodeGen/CGExprAgg.cpp:1688: void (anonymous namespace)::AggExprEmitter::VisitInitListExpr(clang::InitListExpr *): Assertion `Field->isUnnamedBitfield() && "Only unnamed bitfields allowed"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /tmp/aarch64-toolchain/bin/clang++ /tmp/out.cpp -S -o /tmp/out.s -emit-llvm
1.      <eof> parser at end of file
2.      /tmp/out.cpp:9:5: LLVM IR generation of declaration 'GetFoo'
3.      /tmp/out.cpp:9:5: Generating code for declaration 'GetFoo'
 #0 0x000055c231315433 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/tmp/aarch64-toolchain/bin/clang+++0x7315433)
 #1 0x000055c23131342e llvm::sys::RunSignalHandlers() (/tmp/aarch64-toolchain/bin/clang+++0x731342e)
 #2 0x000055c23127c68e (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
 #3 0x000055c23127c8e0 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #4 0x00007fb5eec3daa0 (/lib/x86_64-linux-gnu/libc.so.6+0x3daa0)
 #5 0x00007fb5eec8957c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007fb5eec3da02 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #7 0x00007fb5eec28469 abort ./stdlib/abort.c:81:7
 #8 0x00007fb5eec28395 _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #9 0x00007fb5eec36ab2 (/lib/x86_64-linux-gnu/libc.so.6+0x36ab2)
#10 0x000055c2319347fc (anonymous namespace)::AggExprEmitter::VisitInitListExpr(clang::InitListExpr*) CGExprAgg.cpp:0:0
#11 0x000055c23192c1d9 clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*, clang::CodeGen::AggValueSlot) (/tmp/aarch64-toolchain/bin/clang+++0x792c1d9)
#12 0x000055c2319371d0 (anonymous namespace)::AggExprEmitter::EmitInitializationToLValue(clang::Expr*, clang::CodeGen::LValue) CGExprAgg.cpp:0:0
#13 0x000055c231933495 (anonymous namespace)::AggExprEmitter::VisitInitListExpr(clang::InitListExpr*) CGExprAgg.cpp:0:0
#14 0x000055c23192c1d9 clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*, clang::CodeGen::AggValueSlot) (/tmp/aarch64-toolchain/bin/clang+++0x792c1d9)
#15 0x000055c23182c737 clang::CodeGen::CodeGenFunction::EmitExprAsInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) (/tmp/aarch64-toolchain/bin/clang+++0x782c737)
#16 0x000055c231829b2b clang::CodeGen::CodeGenFunction::EmitAutoVarInit(clang::CodeGen::CodeGenFunction::AutoVarEmission const&) (/tmp/aarch64-toolchain/bin/clang+++0x7829b2b)
#17 0x000055c231824981 clang::CodeGen::CodeGenFunction::EmitVarDecl(clang::VarDecl const&) (/tmp/aarch64-toolchain/bin/clang+++0x7824981)
#18 0x000055c2318244ae clang::CodeGen::CodeGenFunction::EmitDecl(clang::Decl const&) (/tmp/aarch64-toolchain/bin/clang+++0x78244ae)
#19 0x000055c231734d9c clang::CodeGen::CodeGenFunction::EmitDeclStmt(clang::DeclStmt const&) (/tmp/aarch64-toolchain/bin/clang+++0x7734d9c)
#20 0x000055c231729091 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/tmp/aarch64-toolchain/bin/clang+++0x7729091)
#21 0x000055c231728308 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/tmp/aarch64-toolchain/bin/clang+++0x7728308)
#22 0x000055c231735ea0 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/tmp/aarch64-toolchain/bin/clang+++0x7735ea0)
#23 0x000055c2317185d4 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/tmp/aarch64-toolchain/bin/clang+++0x77185d4)
#24 0x000055c2317191f5 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/tmp/aarch64-toolchain/bin/clang+++0x77191f5)
#25 0x000055c2316527c8 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/tmp/aarch64-toolchain/bin/clang+++0x76527c8)
#26 0x000055c23164ad0c clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/tmp/aarch64-toolchain/bin/clang+++0x764ad0c)
#27 0x000055c23164f2cb clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/tmp/aarch64-toolchain/bin/clang+++0x764f2cb)
#28 0x000055c2316498d5 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (/tmp/aarch64-toolchain/bin/clang+++0x76498d5)
#29 0x000055c23201d82f (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#30 0x000055c23201ae86 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) CodeGenAction.cpp:0:0
#31 0x000055c2332b5e89 clang::ParseAST(clang::Sema&, bool, bool) (/tmp/aarch64-toolchain/bin/clang+++0x92b5e89)
#32 0x000055c231f39380 clang::FrontendAction::Execute() (/tmp/aarch64-toolchain/bin/clang+++0x7f39380)
#33 0x000055c231ea8adf clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/tmp/aarch64-toolchain/bin/clang+++0x7ea8adf)
#34 0x000055c2320145c2 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/tmp/aarch64-toolchain/bin/clang+++0x80145c2)
#35 0x000055c22ee8b281 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/tmp/aarch64-toolchain/bin/clang+++0x4e8b281)
#36 0x000055c22ee8798a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#37 0x000055c231d20c02 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) Job.cpp:0:0
#38 0x000055c23127c509 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/tmp/aarch64-toolchain/bin/clang+++0x727c509)
#39 0x000055c231d2043f clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/tmp/aarch64-toolchain/bin/clang+++0x7d2043f)
#40 0x000055c231ce01de clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/tmp/aarch64-toolchain/bin/clang+++0x7ce01de)
#41 0x000055c231ce048e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/tmp/aarch64-toolchain/bin/clang+++0x7ce048e)
#42 0x000055c231cfdc60 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/tmp/aarch64-toolchain/bin/clang+++0x7cfdc60)
#43 0x000055c22ee86e94 clang_main(int, char**) (/tmp/aarch64-toolchain/bin/clang+++0x4e86e94)
#44 0x00007fb5eec2920a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#45 0x00007fb5eec292bc call_init ./csu/../csu/libc-start.c:128:20
#46 0x00007fb5eec292bc __libc_start_main ./csu/../csu/libc-start.c:376:5
#47 0x000055c22ee84361 _start (/tmp/aarch64-toolchai
[out-29ed70.sh.txt](https://github.com/llvm/llvm-project/files/9933348/out-29ed70.sh.txt)
[out-29ed70.cpp.txt](https://github.com/llvm/llvm-project/files/9933349/out-29ed70.cpp.txt)
n/bin/clang+++0
[out-29ed70.sh.txt](https://github.com/llvm/llvm-project/files/9933347/out-29ed70.sh.txt)
x4e84361)
clang-16: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project.git 40e99473170f5045e0b5f2cafabd2a1be8c7ec26)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /tmp/aarch64-toolchain/bin
clang-16: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-16: note: diagnostic msg: /tmp/out-29ed70.cpp
clang-16: note: diagnostic msg: /tmp/out-29ed70.sh
clang-16: note: diagnostic msg: 

********************
```

Removing the brace-initializers reveals that the default constructor is implicitly deleted, which seems probably related.

```
Foo GetFoo() {
-  Foo result{};
+  Foo result;
  return result;
}
```
```
/tmp/out.cpp:10:7: error: call to implicitly-deleted default constructor of 'Foo'
  Foo result;
      ^
/tmp/out.cpp:3:5: note: default constructor of 'Foo' is implicitly deleted because variant field '' has a non-trivial default constructor
    struct {
    ^
1 error generated.
```

Easy fix for users, simply declare a default constructor for the object:

```
struct Foo {
+  Foo() {}
  union {
    struct {
      float red = 0.0f;
    };
  };
};
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWltz4joS_jXkRQXl--UhD4SQTLayJ1MhZ84jJcsCvMdYlCVnwv767ZYMWA5JhjBz9tTuVAawLt1fX9QtWZ2JfHv5kD0XopHllogKPmq-qUXeMC7hmVCSNUWZk--FWhEqJa-VJAMvGUTO8Pr-_ts_59Pfxlf30_l4Nps-Pt09_DYb-NcPFfQPvHTgXA-csfl8WhWSwB9V5Mt0fE0WtViTLZeK1zndIs3A4WkaxL4bO4vQCULuZOHCY3RBs9yjbsYTFnPmRUjYmwAwRZbFM6-IWgFRhfQNwgKAr6gkGYdOWShVVEtCa9FUOVmIGoT6vipKjjw9xwFiLgndKA1jh3sJDcOWwZpuM04qoWBCzRmvFHwtay4lMBiRO5KLauDFCng9cyLKnNctgCGvaFby3CgPFLkgrKQAQgmS86wBNEtaVFKNuhqaFesNoNoboB74424_6tT86Uep6oYpciMEGcRXpo2QpkLpOw2EtAOtNkIWpaAoUE7AYMQZOYuB3xkwiK87z90n67f-RAi3XMEXeoaXdllhH6isKRU2WkRrrpq62vV2yR8T93ijF4AVb9R6A5-U1mwVBUMlRMlWoF9oy_SnVv7Au4K_w3DRqBHbbMhwRobCbpZkyNeFGpbl89ow6lAAq-DoRtbwWQpGS_heCrEsOfxYiTV-wWy2QnKaxB7BTVlk8DkROb_liGxyO33Z1OPlEqEAZTdKEmTwLIoc_ZNWotquYXmSiq653FDG0TvBMfwxzMLJU-CljLP4428F-PtdVaj7QirsBRqGt-7u9gD5saFFxvtlA5q9KXiZDwf-tJC_V8g1vyrUAht31sUlGMGX94ABozGDSNaOglVYluI7h-EeLA-yoLDW8tbTv95Px7MpkU0GqHV0WaLDi1rh2lgptZGI1LtBnULMabIRE-uDHvFrCOvjX5wpeCykbLiEH4TC2i4qVjY5h1DACaupXJGMsj9VrZU2IRu9siCwSUArRVObZpwJy1awgiroqBuIGawuNrvFOVNAhOTNerNfjw50pV9rsazpGgLLsllDcJCtY_x6Z3SR_cCfcAFrdko2tJYYehThIArEmgUo3Iz09MgeE8CJVg8RL4ZwcvdIlrziNdUuAARyDiDbRzDhbm3Hhqj_EdHblhgEPAaermPu-yShyXeI8-LAvzBknu_6bhj4PtFCa9eVW2l-fK2LSmmjPBnLJodBNf0-FxDvOF1rL52ATyjjs8lppoE_5yU2KPaZDGG6PZh-4PFjMB-balYsK1p-AQcreS33q-eTSJCRhcSzkHgxixL-UcyY4LJ45Ew883o7EZXiL-oO0o7pNVD1GKCjVTeB9S1BDlgZpUBIKTlGo3UBR__fI_T7CBPu2NMtFe14nsIiaFnEiyzknPk5pU6rYxNrX5JoDioui6p5GS6rxnSwkRSjSKtWT7EUG9o0E9gZMDKfb9QKHCuf_1mU5Vznalz2xqVHQLbaKEwF3WEjBmiDAD7i6EA_eoXZ8chSalVoSuYn_Bjpp63M-Qaj3EbI4gW-a1pIrmnDAvLHHdKxTRo2VVFKaIbxVZNSudGKbtIUEhfRHSgkfQp-GpJ5Vc5hv5DPc7EGN9W0wFSlzoA0X8slo4ac68axjgV7gmlP2ohm3okWwimH7SS4kh0rUj-IF-wXp0uTLUk_YXfcEYHZ0SH1mJunpENxl_m7DzdNxdCJTCPia6HaYHTOZgJ2jRrK5E2yMPsbLRs-K8U5sc-At9Tu9dQeu7nzGbXjA-q2oGXxb72AnsS9xvxa5A-E3U370DJ-D7sfgF__HVwm-J92mdCSLvFYDDHqZOm0AiXq9scF1AJdw7bjhzSw8yM4V4KcZ-jAiGjpIOrpIM287BMWbpT4RuvXSvh4ejsVqOiz604h0VliohSWmHFPzCBN3NPFBJxoNFvEtvHnAEdcFvCkDzyg_HTgr1H_RMiAyIKcWpBjP8hT9jnIM7VWr2Fj68-AbpB1oXt27o691Ek_4SbmZclr8F3gesEftubjuqbbRw5npklnwlipTgjxp-cIq2WxhHV7wia-k3xC2L-ZmCiFJabXc8eQwy78ZDEnYr3Bl3Qo3B9w-Iej5YyJDe-Hu8OojovuAvcvT3JGOkt8e28Ru0mYB6eLv2u5Evn2XWt_HrpGZkEPetBTdxGeBr097XPstGHfliKjpYmLXQ_dz38_JU9udwPvqoX4KdFIi2fJb-9PohAPqR_J_0-RNyU_GM7IuQN7zRcF7m1Rvh_Rhmlvtx_nWNeAt6Szdx5RQHPnwzRxXLr_nlQatCVV3JNq4bEP91PHpXpbljPwIhwLb9LDmyb5h2usj_dJbO75My-P7zLOVTEisiBb-wvPcfPEW3z4bskgx2Ag6v5Lpffx39ai2WDOAsZG8iu8OeH10SOT_aoQ0FGeRF2FXlH2J6_yCUSMZr07uJ2KoxVnrBf1cRxWdve9LOSJdXT7im9mx7OnXjTna9pLWeedOVLDuWvA3svBhZ_6iZWRb2p8q1bl424SeuGsUfy8F5WGlYXFTo-cJjRfkF5GL0oORxupaMW4haYFaGmwB_6snGDgWHiDnnsF8N3F2yI7wH4WjL5G-UqscxZpYmBYOLu5y-M8yTw8cDF3vtaUkuN7whXtbQQhA1tt0IDXT2fBDQwaC27UgxunCSU7XU7cJ70GOqBna1qW3zjbR5Mj2LXl87p4fitU2Lki9xzmeOZ27cBo0Wbuea01tLt704FtaoYwgIKXSfNFZe-rDe_W4BMXbL6GONNfT0ctcWh82CB7WlqNM1UX1VIPnbZ2kqqlPJ-zlxfXNQ8ZlQWbSz28VZI1GBvmqqYFXlGZ7h45vLBjGLU7_ThkfIhN2heM6vWUgRfMXT0o2d0L_ENkx21g5z_YpIRO2lH_sZf9pgfvUOiCl1tLhe-b6_ORwACzXDbte0_gW5Hr_8_6n1Wu0V1XuYH9IoBx2GXwN5WrYyl9lat2GrcCb28iDrAOij82dGzl6DPFN9JZ4rt98YPkZPFhycm3ZYdefBVtyf5eeN17xIYW6AztBeCPqqt1m5-qNNCJpTR7W8MWOYuctwBed35bKftIrn5L2X-h0j4dt4wWLDX5vVQb8bR9IbHbG-xg6nAxPjfXI30LQO9a1ks9h5L5HO_1IFbRWs0xo873l4lMNq-vO9sL1WOTRitQZoilMm504Bq-4prBcRfn4Nm1z8j8ROpDTd3cX3pI1DtkryA6RtQS5ZgUR4n7cYSwD7Tjnp0CP3KJofquMVoK4ZVo1NBLeR47I7kaKUic4TVMPLmQBktGUOVpCtv1ABm_pry3r8UWMv5P45vafHekd4zfdMFfrI74XXWg_6Pd9g0a3NBFUxNe15hXx23936I9uMD6N3HAFEeZ8kr-UihTMOP6WNaWNJKT4TMWRknOSdE5ZnQ5EQgu-lbHjUbOSN_HnibvCAaQU4ovTT0nrZcc92mkvb9vqj8r8b3q3OO3dZ9YDUHWIBe-ECCmhkF36YNRCfJfF1pHH8aeV-qthMLTIskLuqyEVAUja7nUtNo1dsZfp-ywLVsbPz2NJ1_I05cpuXm4v3_44-63W3Jzdz-dkacH3Xz1-y15nH59eHxC9Zu5x8rOEonx9s3Ss_2AmhO9OYNeqvYkf1AFnRKtzpI6l4RcfcIOP8sax2pCH_laPGOxGdb9ZVgTNix2xQWwNEjNnzkt5a5MmJOcL2hTtvsirI0VNVYm441SwQpVbmFEyRVWME6wVJitcAGuJQE7ZjTTRdIl2sQq3-1he7sodvhOVSwWBXZ7P10t26-TfVWt5-IhLbZjFCxGjDYHRQxbRRxVmcA3grFVxnccuq4nDqdvQvEHbeHg3o0-4HbcWiTjjGLMfKZ1QStFdDkqzsIpWBBOgUM1hKPSMzjHMS7vF03vZXCNznZVkwdHOOaeUyq3AOVFl0ECPKwEhNMX4t-2ZZEckB2TGWegw4pM5yX_1HLwnTd1PHDnL395pfgO7QW_dKMoDl0_jd2L_NLPUz-lFwosyS8hhZsshiryHM8buu7Q8ciTeIJM_pfUKV80dXn5-ULkMEkc52J1mWdpmOW5HyV-nDI3SlKXuU7KgixNs5hFFyXNeClRYuBf8e9Ek0As4fVFcYnCu67jw2fquyMWLJwoZZQnoR9kNB1AvoZtZzlCHCNRLy_qSw0pa5YSOks498lDJyQZrOHUCkb6tFErUV-umCrWF5rxpQb-HzMS3Rc">