Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clang assert with [[msvc::no_unique_address]]: (BaseLayout.getNonVirtualSize() == CharUnits::Zero()), function layoutNonVirtualBase, file RecordLayoutBuilder.cpp, line 2946 #74442

Closed
zmodem opened this issue Dec 5, 2023 · 3 comments
Assignees
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" platform:windows

Comments

@zmodem
Copy link
Collaborator

zmodem commented Dec 5, 2023

(From https://crbug.com/1507521)

Unreduced reproducer:
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

@zmodem zmodem added clang Clang issues not falling into any other category platform:windows labels Dec 5, 2023
@zmodem
Copy link
Collaborator Author

zmodem commented Dec 5, 2023

Fully preprocessed:
a.ii.gz

$ build/bin/clang -cc1 -triple i386-pc-windows-msvc19.34.0 -emit-obj -target-cpu pentium4 -target-feature +sse3 -fdeprecated-macro -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.34 -std=c++20 -fcomplete-member-pointers -w /tmp/a.ii

@zmodem
Copy link
Collaborator Author

zmodem commented Dec 5, 2023

It seems to be the combination of [[msvc::no_unique_address]] and __declspec(empty_bases) that does it:

Reduced:

$ cat /tmp/x.ii
struct Empty {};

struct NUA {
  [[msvc::no_unique_address]] Empty e;
};

struct __declspec(empty_bases) Derived : NUA { } x;

$ build/bin/clang -cc1 -triple i386-pc-win32 -emit-obj -fms-extensions -w /tmp/x.ii
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.

@amykhuang amykhuang self-assigned this Dec 5, 2023
amykhuang added a commit that referenced this issue Dec 11, 2023
…ec(empty_bases) (#74776)

no_unique_address makes it possible for a class to be empty and have
non-zero virtual size, so just remove this assert.

Bug: #74442
@nico nico closed this as completed Dec 22, 2023
@EugeneZelenko EugeneZelenko added clang:frontend Language frontend issues, e.g. anything involving "Sema" and removed clang Clang issues not falling into any other category labels Dec 22, 2023
@llvmbot
Copy link
Collaborator

llvmbot commented Dec 22, 2023

@llvm/issue-subscribers-clang-frontend

Author: Hans (zmodem)

(From https://crbug.com/1507521)

Unreduced reproducer:
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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" platform:windows
Projects
None yet
Development

No branches or pull requests

5 participants