<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74442>74442</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang assert with `[[msvc::no_unique_address]]`: (BaseLayout.getNonVirtualSize() == CharUnits::Zero()), function layoutNonVirtualBase, file RecordLayoutBuilder.cpp, line 2946
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang,
platform:windows
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zmodem
</td>
</tr>
</table>
<pre>
(From https://crbug.com/1507521)
Unreduced reproducer:
[json_parser-744035.cpp.gz](https://github.com/llvm/llvm-project/files/13558070/json_parser-744035.cpp.gz)
```
$ build/bin/clang "-cc1" "-triple" "i386-pc-windows-msvc19.34.0" "-emit-obj" "-mrelax-all" "-mrelocation-model" "static" "-fmerge-all-constants" "-fno-delete-null-pointer-checks" "-mframe-pointer=all" "-relaxed-aliasing" "-fmath-errno" "-ffp-contract=off" "-fno-rounding-math" "-mconstructor-aliases" "-target-cpu" "pentium4" "-target-feature" "+sse3" "-mllvm" "-x86-asm-syntax=intel" "-tune-cpu" "generic" "-D_DEBUG" "-D_MT" "-D_DLL" "--dependent-lib=msvcrtd" "--dependent-lib=oldnames" "-fno-rtti-data" "-stack-protector" "2" "-fms-volatile" "-fno-dllexport-inlines" "-fdiagnostics-format" "msvc" "-cfguard-no-checks" "-gno-column-info" "-gcodeview" "-gcodeview-ghash" "-gno-codeview-command-line" "-debug-info-kind=constructor" "-fdebug-compilation-dir=." "-ffunction-sections" "-fcoverage-compilation-dir=." "-D" "BASE_IMPLEMENTATION" "-D" "IS_RAW_PTR_IMPL" "-D" "DCHECK_ALWAYS_ON=1" "-D" "USE_AURA=1" "-D" "_HAS_NODISCARD" "-D" "_CRT_NONSTDC_NO_WARNINGS" "-D" "_WINSOCK_DEPRECATED_NO_WARNINGS" "-D" "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE" "-D" "CR_CLANG_REVISION=\"llvmorg-18-init-13481-ge469f847-0\"" "-D" "COMPONENT_BUILD" "-D" "CR_LIBCXX_REVISION=3467ae2512627f51e25ee4a851a873c7a3083a6a" "-D" "__STD_C" "-D" "_CRT_RAND_S" "-D" "_CRT_SECURE_NO_DEPRECATE" "-D" "_SCL_SECURE_NO_DEPRECATE" "-D" "_ATL_NO_OPENGL" "-D" "_WINDOWS" "-D" "CERT_CHAIN_PARA_HAS_EXTRA_FIELDS" "-D" "PSAPI_VERSION=2" "-D" "WIN32" "-D" "_SECURE_ATL" "-D" "WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP" "-D" "WIN32_LEAN_AND_MEAN" "-D" "NOMINMAX" "-D" "_UNICODE" "-D" "UNICODE" "-D" "NTDDI_VERSION=NTDDI_WIN10_NI" "-D" "_WIN32_WINNT=0x0A00" "-D" "WINVER=0x0A00" "-D" "_DEBUG" "-D" "DYNAMIC_ANNOTATIONS_ENABLED=1" "-D" "BASE_USE_PERFETTO_CLIENT_LIBRARY=1" "-D" "ABSL_CONSUME_DLL" "-D" "BORINGSSL_SHARED_LIBRARY" "-D" "__WRL_ENABLE_FUNCTION_STATICS__" "-D" "__DATE__=" "-D" "__TIME__=" "-D" "__TIMESTAMP__=" "-D" "PROTOBUF_ALLOW_DEPRECATED=1" "-ffile-reproducible" "-O0" "-WCL4" "-Wimplicit-fallthrough" "-Wextra-semi" "-Wunreachable-code-aggressive" "-Wthread-safety" "-Wno-missing-field-initializers" "-Wno-unused-parameter" "-Wno-psabi" "-Wloop-analysis" "-Wno-unneeded-internal-declaration" "-Wno-nonportable-include-path" "-Wenum-compare-conditional" "-Wno-ignored-pragma-optimize" "-Wno-deprecated-builtins" "-Wno-bitfield-constant-conversion" "-Wno-deprecated-this-capture" "-Wno-invalid-offsetof" "-Wno-vla-extension" "-Wno-thread-safety-reference-return" "-Wshadow" "-Werror" "-Wno-builtin-macro-redefined" "-Wheader-hygiene" "-Wstring-conversion" "-Wtautological-overlap-compare" "-Wshorten-64-to-32" "-Wimplicit-int-conversion" "-Wsign-compare" "-Wsign-conversion" "-Wtautological-unsigned-zero-compare" "-Wexit-time-destructors" "-Wglobal-constructors" "-Wno-undefined-bool-conversion" "-Wno-tautological-undefined-compare" "-Wno-trigraphs" "-fdeprecated-macro" "-ferror-limit" "19" "-ftrivial-auto-var-init=pattern" "-fno-use-cxa-atexit" "-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.34" "-std=c++20" "-fno-inline" "-fno-implicit-modules" "-Qn" "-fcolor-diagnostics" "-fuse-ctor-homing" "-mllvm" "-instcombine-lower-dbg-declare=0" "-mllvm" "-split-threshold-for-reg-with-hint=0" "-fcomplete-member-pointers" "-faddrsig" "-x" "c++" "json_parser-744035.cpp"
clang: /work/llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:2946: void (anonymous namespace)::MicrosoftRecordLayoutBuilder::layoutNonVirtualBase(const CXXRecordDecl *, const CXXRecordDecl *, const ASTRecordLayout &, const ASTRecordLayout *&): Assertion `BaseLayout.getNonVirtualSize() == CharUnits::Zero()' failed.
```
Comments on the crbug suggest it's the ``[[msvc::no_unique_address]]`` that's trigger this:
> The assert is due to the second not_fn in https://chromium-review.googlesource.com/c/chromium/src/+/5067676/10/base/containers/flat_tree.h
>
> It goes away if I remove the NO_UNIQUE_ADDRESS on https://source.chromium.org/chromium/chromium/src/+/main:base/containers/flat_tree.h;l=102?q=flat_tree.h which we started on using on msvc after https://chromium-review.googlesource.com/c/chromium/src/+/5026084
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWFuP4yzS_jX0jUUrwTle9IVjOzPRm3aycXoy891YxC7bvIPBC7gP8-s_4ZzcSWZ2V3qlVtpQD8VDURRVUK1ZIQCe0HCGhsEDbUwp1dOvSmZQPexl9vGEyGSuZOWUxtQauR4ic0Tmqdo3xWMqK0Tm_WFvPCR9RKaoF6Ced_h9EQqyJoXMUVAraT8Vcj3niBnO_tZSJDVVGhQeDwY9d_iY1vVj8QsNA0Qmn-crmCmb_XFCzl9P_3Ct5N-QGkTmOeOgLR13OJz0xj1E5r-f4jNXNOod_w5NMnD2DeMZIvM9E3a5nIrCQYTgNO0jQtpPo1jN4dhi7mSE6xS_MZHJN40r_Zr2p4_u4LF3wkPFDJb7v0_tSgGn75hy3u2RKTVMCmy34CTQhhqWnlB5BaoAOw6nUmhDhdFnmZA4Aw4GsGg4x7VkwoDCaQnpzzOqyhWt4CREbtDh0JKCDFPOqGaiuMxKTYlBKSHPXXltGRhFU4PcQOZ5l4aSjciYKLAdeJ65Zaya1Eh1mALOrAxVBRic1s2xpwZhWFMNrgA5UNOok-ERmWkN7nmCg3McGu-TEaa6wvpDGPqO3MCu97xS0wjozFaAAHWxcpAE4ezly6X5vO2IlstTA2dQg8hAGMzZHrmB3Xllst_KJc8EreDTliljGM6ooadObWj60zq3AWuqYze5bIbGr5JTw84OeNh6zuG9lspgJjgTnUkyRgshtWGpxrlUFTVHkaV7QqV50VCVYSGvHKawPZI3lcBM5GcHKFKZwSuDt5sOXJRUl5-HHyWprCoqMmz5nQAZ7JuiVY1_MpEhN-j4yWUNLSqVVc344ZBkzHrv48UhG5G2Ag3t_8v6U_kKihbwp-HB8WPmxWGyeF4vw-cw2nrbxSq6hiziZOPtkvV20wKvxYH_NfT_SrzlzvsRJ6sIuUH_GvMSh4n3svHuyZKvXpxEq2AR-94muJH6m20SraJ4G_hJtEp23iZaRF_iG9xuEcUr_68kCNeb0Pe2YfBH-HIx89fr5Ku3CUKLSJ5XQYjc4L4gCb9vwyhefAuvFfmbxF960ZdkE35bxIt2-WjoI0Ls4ZSqwP0JZoIZ3HcHkz4uYDCa5pPBGPcOsBuFq-f1KgqjbTJ7WSxv7OFvWobfv3cndAejMQUy7JMRGefDPpAhwIBOhn06GbvpmLq9iUtH9MYKSbwNEv-uzTdeFCS3drOiOPRfNqE179nYN7jYX_5XOG-7tIDVOoy-3LiW3dRgtbth4YebbeJ_9RZRsvY2XutB4fftxkvmi3AZ3ODXsbdeJN_CzdFeN0bfLSL3pvPE39veENstIqtx7j0vlj-QG3xqJ0EY_7VdrRNvvb47UbIMvSix9n0OvZvjFq2eF9Gz9_2Gzku08K2TXp-t-93RNgi6az60d4uo30uixT1Lu-1vtEVu0Hvveb3eHfLfws1vxVeXyCk8_Ii854WfeFG0OsSXOAkjb7YMg3vRoI1HNlysw8083G5Xib9c2NOwXMw23ubHvTHeLF4m_iqKX57D7nV11rna2BgQL5P4q7cJg7Oum-Ow2yyP5JL5S-RbtklsWftxktzCA28bJok98Tei7eL5T6J46z2v78rXm9V2NXuZJ95yudp1wll35blNAPEp2WT7y824Om_Lzl-es4kdq2rOUmZwTjk3pZJNcb6xdvBuFMUaKnbuaoQCmpZ0z6G9zTAtCgVas9fzTDtTKqAZ1jQH83HuFRJXTNtsCucMeNYGP0Y5-wVKd1GNaDRkuKY2P7OpWUdWa7q_kOFS1pgKyj80u1IhADKwcxhQgnKcQcqpam-8LlBIYTOFdjlMpLzJANedVG0Hoqna65Iqu2CRMauC8q4SVgipLGNFi4piWRtWsV_QhWRQK0ipgQzbpNow8YnvnpmDTU65rP14BaWv6HbUmJJpnNK6kwUeyIhXylmGZZ5rMDLvyl45xfBuQFzr_bRjWEEOCkRqHck06oLUJc3k28U2SslPu3NcGq5oqiRWkEHOBJyzwF0JNAOFy4-CwSXv2WmjrFfcWbKhjZFcFiylHNvkhdP6tBsdVlIZEHg0wEbiS7i--Da7b1Bb9t1qO3T-mUoj2pIxw79AyRsV8M4MNqwCnMEpf7tsd8Hlnh6rlmtZ67pHq-G9lPw3fnBF5jTimohFKlYoWpedJPjiQ-0-nQXtdmLOKnZKi_vTs9Ao9soox3Zi_EpVe3qRG9TU2BN2xtkVaMDpO8XUWEOcJZW--J7u9rasDdszzi7h4kaAT2Zwg7akPAG1aTNlRGaIzEivS-SQ_n_qOXlEJbOGXyqDf4lOjsylwp1K4Sxp12VLtlJWnZrwU7HFhDaprPZMAObyDRTO9sUx-IC9IO-O0jW3HlMq0KXkma1NsIICvzFT4pIJ0x2ZW7O0xW0F1R7UqYK9EKVZpjQ7E3w_fhxtdGzdfxaweWfnTaAt-dsHCzJ_k-rn7YPDAUHmtqwjcy_eIjLfQCpVtqQfsjGzhvEMVKvb9ch0MLLqXiXLHEQmVEjxUclGO201WNMUEJki10Ou98xSJbXMzR11BwRvuyIpvjFlGspnVAMik_ZkOf7374eBAaTcQcRDxHf-o8iLt93pHERGfxJ6rdwSdjytQdm7wUGjnmVyAD0W0GEYt9fCBJGpY294N3D8kqoXwYw-LOn_wB5IC0Bk7OSUccge77_PtL--rCoQRjtSOKYEp32ScnRTFKCNY0_fWLeC49DhDA1nbbXbTidk0gj27wYS6zOgNRoG9q8FO6akRwWKFQUox945dmD31cgNnW0JDm2X7zDtZA04RraTarA3piOkSXLhMHH9flYqWbGmwqotih8LKQsOWjYqheMrV9qBITLXKm2HzhCZD3uj8Wg8QmTe7yEy37ebP0-lMJSJ9jjMc05NYhTAY3lhe_laGKeQoB36Rj8cljsLR0ElX6HlHq1sXv2vlzDxgmATxrE18Wf-J6ZHfo9SFZ_p_oZ5RZlArvefGLszboNdjyB3_m_kBh2Z81aytHTewNGGKgOZJdfY3Mp-2P11aG5A_cMGJ6PeZPCQPbnZ1J3SB3jqj3v98Wg6GE8fyqe-Ox5O9vvJKB9Nx3RIJvvxcDKFgUvG6SCfjB_YE-kRt096w950MHCnj-mwN3VhQnoZhX5K9mjQg4oy_miDjDXnA9O6gafxYDAgD5zugev2lZaQY9whiNgqtebU5FJVyPWOb49WNAwe1FMbr_ZNodGgx5k2-qLcMMPhyW-fNY_-ayOu878dlDY6Tv6REz-1seb0fOPcD2--Y1N853cxlviOvfQcG2kfGsWf_ucn5Nbk1hdbq_9_AAAA___Xee8h">