[libc++] Add a key function for bad_function_call
authorShoaib Meenai <smeenai@fb.com>
Tue, 28 Mar 2017 19:33:31 +0000 (19:33 +0000)
committerShoaib Meenai <smeenai@fb.com>
Tue, 28 Mar 2017 19:33:31 +0000 (19:33 +0000)
commitc7cd73e8b89ae0a37ed056a9dbad9e6af42a255c
tree817ba7fa1d51727e96b8faee9912c0f13960ffa8
parentb5a46c1f45a7ecbcfc99b682000bbc8c0b7712a5
[libc++] Add a key function for bad_function_call

Summary:
bad_function_call is currently an empty class, so any object files using
that class will end up with their own copy of its typeinfo, typeinfo
name and vtable, leading to unnecessary duplication that has to be
resolved by the dynamic linker. Instead, give bad_function_call a key
function and put a definition for that key function in libc++ itself, to
centralize the typeinfo and vtable.

This is consistent with the behavior for other exception classes. The
key functions are defined in libc++ rather than libc++abi since the
class is defined in the libc++ versioning namespace, so ABI
compatibility with libstdc++ is not a concern.

Guard this change behind an ABI macro, since it isn't backwards
compatible (i.e., clients built against the new libc++ headers wouldn't
be able to run against an older libc++ library).

Reviewers: mclow.lists, EricWF

Subscribers: mgorny, cfe-commits

Differential Revision: https://reviews.llvm.org/D27387

llvm-svn: 298937
libcxx/include/__config
libcxx/include/functional
libcxx/lib/CMakeLists.txt
libcxx/src/functional.cpp [new file with mode: 0644]