diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 4c0c11e35fd2..6f49ec474473 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -221,72 +221,6 @@ static void DefineExactWidthIntType(TargetInfo::IntType Ty, ConstSuffix); } -/// \brief Add definitions required for a smooth interaction between -/// Objective-C++ automatic reference counting and libc++. -static void AddObjCXXARCLibcxxDefines(const LangOptions &LangOpts, - MacroBuilder &Builder) { - Builder.defineMacro("_LIBCPP_PREDEFINED_OBJC_ARC_ADDRESSOF"); - - std::string Result; - { - // Provide overloads of the function std::__1::addressof() that accept - // references to lifetime-qualified objects. libc++'s (more general) - // std::__1::addressof() template fails to instantiate with such types, - // because it attempts to convert the object to a char& before - // dereferencing. - llvm::raw_string_ostream Out(Result); - - Out << "#pragma clang diagnostic push\n" - << "#pragma clang diagnostic ignored \"-Wc++0x-extensions\"\n" - << "namespace std { inline namespace __1 {\n" - << "\n"; - - Out << "template \n" - << "inline __attribute__ ((__visibility__(\"hidden\"), " - << "__always_inline__))\n" - << "__attribute__((objc_ownership(strong))) _Tp*\n" - << "addressof(__attribute__((objc_ownership(strong))) _Tp& __x) {\n" - << " return &__x;\n" - << "}\n" - << "\n"; - - if (LangOpts.ObjCRuntimeHasWeak) { - Out << "template \n" - << "inline __attribute__ ((__visibility__(\"hidden\")," - << "__always_inline__))\n" - << "__attribute__((objc_ownership(weak))) _Tp*\n" - << "addressof(__attribute__((objc_ownership(weak))) _Tp& __x) {\n" - << " return &__x;\n" - << "};\n" - << "\n"; - } - - Out << "template \n" - << "inline __attribute__ ((__visibility__(\"hidden\")," - << "__always_inline__))\n" - << "__attribute__((objc_ownership(autoreleasing))) _Tp*\n" - << "addressof(__attribute__((objc_ownership(autoreleasing))) _Tp& __x) " - << "{\n" - << " return &__x;\n" - << "}\n" - << "\n"; - - Out << "template \n" - << "inline __attribute__ ((__visibility__(\"hidden\"), " - << "__always_inline__))\n" - << "__unsafe_unretained _Tp* addressof(__unsafe_unretained _Tp& __x)" - << " {\n" - << " return &__x;\n" - << "}\n"; - - Out << "\n" - << "} }\n" - << "#pragma clang diagnostic pop\n" - << "\n"; - } - Builder.append(Result); -} - /// \brief Add definitions required for a smooth interaction between /// Objective-C++ automated reference counting and libstdc++ (4.2). static void AddObjCXXARCLibstdcxxDefines(const LangOptions &LangOpts, @@ -726,10 +660,7 @@ void clang::InitializePreprocessor(Preprocessor &PP, if (LangOpts.ObjC1 && LangOpts.CPlusPlus && LangOpts.ObjCAutoRefCount) { switch (InitOpts.ObjCXXARCStandardLibrary) { case ARCXX_nolib: - break; - - case ARCXX_libcxx: - AddObjCXXARCLibcxxDefines(LangOpts, Builder); + case ARCXX_libcxx: break; case ARCXX_libstdcxx: diff --git a/clang/test/SemaObjCXX/arc-libcxx.mm b/clang/test/SemaObjCXX/arc-libcxx.mm deleted file mode 100644 index 7992f602f51a..000000000000 --- a/clang/test/SemaObjCXX/arc-libcxx.mm +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -fobjc-arc-cxxlib=libc++ -fobjc-nonfragile-abi -fobjc-runtime-has-weak -verify %s - -@interface A @end - -void f(__strong id &sir, __weak id &wir, __autoreleasing id &air, - __unsafe_unretained id &uir) { - __strong id *sip = std::addressof(sir); - __weak id *wip = std::addressof(wir); - __autoreleasing id *aip = std::addressof(air); - __unsafe_unretained id *uip = std::addressof(uir); -}