Skip to content

std::type_index equality broken with LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT=OFF #44894

@llvmbot

Description

@llvmbot
Bugzilla Link 45549
Resolution FIXED
Resolved on Jan 26, 2021 06:23
Version 9.0
OS All
Reporter LLVM Bugzilla Contributor
CC @k15tfu,@ldionne,@mclow
Fixed by commit(s) 2464d81

Extended Description

When using LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT=OFF, distinct classes with the same name, each in a different TU and anonymous namespace, are considered equal by std::type_index.

LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT=OFF is used in the libc++ shipped with Xcode as of Xcode 11.4. The bug does not occur in Xcode 11.3.1, the previous version. LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT was introduced in 2405bd6 for LLVM 9.0.0.

See https://gist.github.com/ryb-ableton/1805b61e2d0976de4ba04c2aa2f5992b for a minimal test case.

May be related to #34255


Steps to reproduce on Linux/x86:

  1. Build and install libc++ 9.0 or 10.0 by passing -DLIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT=OFF to cmake
  2. Download and extract a zip of the Gist linked above
  3. Run "bash ./build_and_run"

Steps to reproduce on macOS:

  1. Install and select Xcode 11.4, which uses LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT=OFF by default
  2. Download and extract a zip of the Gist linked above
  3. Run "bash ./build_and_run"

Actual Output:

Assertion failed: (registry[0] != registry[1]), function main, file main.cpp, line 13.
./run: line 4: 39942 Abort trap: 6 ./test
Failure

Expected Output:

Success

Metadata

Metadata

Assignees

Labels

bugzillaIssues migrated from bugzillalibc++libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions