We've built up quite a few links directly to github within the code base. We should instead use `llvm.org/PR<issue-number>` to link to bugs, since that is resilient to the bug tracker changing in the future. This is especially relevant for tests linking to bugs, since they will probably be there for decades to come. A nice side effect is that these links are significantly shorter than the GH links, making them much less of an eyesore. This patch also replaces a few links that linked to the old bugzilla instance on llvm.org.
50 lines
2.3 KiB
C++
50 lines
2.3 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// REQUIRES: stdlib=apple-libc++
|
|
|
|
// This test is dependent on the code generated by the compiler, and it doesn't
|
|
// work properly with older AppleClangs.
|
|
// UNSUPPORTED: apple-clang-15
|
|
|
|
// This test ensures that we retain a way to disable availability markup on Apple platforms
|
|
// in order to work around Clang bug https://llvm.org/PR134151.
|
|
//
|
|
// Once that bug has been fixed or once we've made changes to libc++'s use of availability
|
|
// that render that workaround unnecessary, the macro and this test can be removed.
|
|
//
|
|
// The test works by creating a final linked image that refers to a function marked with
|
|
// both an availability attribute and with _LIBCPP_HIDE_FROM_ABI. We then check that this
|
|
// generates a weak reference to the function -- without the bug, we'd expect a strong
|
|
// reference or no reference at all instead.
|
|
|
|
// First, test the test. Make sure that we do (incorrectly) produce a weak definition when we
|
|
// don't define _LIBCPP_DISABLE_AVAILABILITY. Otherwise, something may have changed in libc++
|
|
// and this test might not work anymore.
|
|
// RUN: %{cxx} %s %{flags} %{compile_flags} %{link_flags} -fvisibility=hidden -fvisibility-inlines-hidden -shared -o %t.1.dylib
|
|
// RUN: nm -m %t.1.dylib | c++filt | grep value > %t.1.symbols
|
|
// RUN: grep weak %t.1.symbols
|
|
|
|
// Now, make sure that 'weak' goes away when we define _LIBCPP_DISABLE_AVAILABILITY.
|
|
// In fact, all references to the function might go away, so we just check that we don't emit
|
|
// any weak reference.
|
|
// RUN: %{cxx} %s %{flags} %{compile_flags} %{link_flags} -fvisibility=hidden -fvisibility-inlines-hidden -D_LIBCPP_DISABLE_AVAILABILITY -shared -o %t.2.dylib
|
|
// RUN: nm -m %t.2.dylib | c++filt | grep value > %t.2.symbols
|
|
// RUN: not grep weak %t.2.symbols
|
|
|
|
#include <version>
|
|
|
|
template <class T>
|
|
struct optional {
|
|
T val_;
|
|
_LIBCPP_HIDE_FROM_ABI _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE T value() const { return val_; }
|
|
};
|
|
|
|
using PMF = int (optional<int>::*)() const;
|
|
PMF f() { return &optional<int>::value; }
|