[llvm-branch-commits] [clang] d1ed670 - [GNU ObjC] Fix a regression listing methods twice.
Author: David Chisnall Date: 2020-12-01T09:50:18Z New Revision: d1ed67037de6f3f44dc446784f74f0e02adec9b5 URL: https://github.com/llvm/llvm-project/commit/d1ed67037de6f3f44dc446784f74f0e02adec9b5 DIFF: https://github.com/llvm/llvm-project/commit/d1ed67037de6f3f44dc446784f74f0e02adec9b5.diff LOG: [GNU ObjC] Fix a regression listing methods twice. Methods synthesized from declared properties were being added to the method lists twice. This came from the change to list them in the class's method list, which missed removing the place in CGObjCGNU that added them again. Reviewed By: lanza Differential Revision: https://reviews.llvm.org/D91874 Added: clang/test/CodeGenObjC/gnu-method-only-once.m Modified: clang/lib/CodeGen/CGObjCGNU.cpp Removed: diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index c6500c0230c4..9825d7bca18c 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -3512,19 +3512,6 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) { ClassMethods.insert(ClassMethods.begin(), OID->classmeth_begin(), OID->classmeth_end()); - // Collect the same information about synthesized properties, which don't - // show up in the instance method lists. - for (auto *propertyImpl : OID->property_impls()) -if (propertyImpl->getPropertyImplementation() == -ObjCPropertyImplDecl::Synthesize) { - auto addPropertyMethod = [&](const ObjCMethodDecl *accessor) { -if (accessor) - InstanceMethods.push_back(accessor); - }; - addPropertyMethod(propertyImpl->getGetterMethodDecl()); - addPropertyMethod(propertyImpl->getSetterMethodDecl()); -} - llvm::Constant *Properties = GeneratePropertyList(OID, ClassDecl); // Collect the names of referenced protocols diff --git a/clang/test/CodeGenObjC/gnu-method-only-once.m b/clang/test/CodeGenObjC/gnu-method-only-once.m new file mode 100644 index ..67d873ccc0aa --- /dev/null +++ b/clang/test/CodeGenObjC/gnu-method-only-once.m @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-freebsd -S -emit-llvm -fobjc-runtime=gnustep-2.0 -o - %s | FileCheck %s -check-prefix=CHECK-NEW +// RUN: %clang_cc1 -triple x86_64-unknown-freebsd -S -emit-llvm -fobjc-runtime=gnustep-1.8 -o - %s | FileCheck %s -check-prefix=CHECK-OLD + +// Clang 9 or 10 changed the handling of method lists so that methods provided +// from synthesised properties showed up in the method list, where previously +// CGObjCGNU had to collect them and merge them. One of the places where this +// merging happened was missed in the move and so we ended up emitting two +// copies of method metadata for declared properties. + +// This class has only instance properties and only one pair of synthesized +// methods from the property and so we should synthesize only one method list, +// with precisely two methods on it. +@interface X +@property (retain) id iProp; +@end + +@implementation X +@synthesize iProp; +@end + +// Check that the method list has precisely 2 methods. +// CHECK-NEW: @.objc_method_list = internal global { i8*, i32, i64, [2 x +// CHECK-OLD: @.objc_method_list = internal global { i8*, i32, [2 x ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [cfe-branch] r341354 - Disable the GNUstep v2 ABI on Windows.
Author: theraven Date: Tue Sep 4 03:40:19 2018 New Revision: 341354 URL: http://llvm.org/viewvc/llvm-project?rev=341354&view=rev Log: Disable the GNUstep v2 ABI on Windows. The code remains so that we can potentially reenable it in a point release, but the driver will reject it. Several issues were raised during testing that made it clear that this was not quite ready for general consumption. Approved by: Hans Wennborg Modified: cfe/branches/release_70/lib/Driver/ToolChains/Clang.cpp Modified: cfe/branches/release_70/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_70/lib/Driver/ToolChains/Clang.cpp?rev=341354&r1=341353&r2=341354&view=diff == --- cfe/branches/release_70/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/branches/release_70/lib/Driver/ToolChains/Clang.cpp Tue Sep 4 03:40:19 2018 @@ -4912,8 +4912,7 @@ ObjCRuntime Clang::AddObjCRuntimeArgs(co } if ((runtime.getKind() == ObjCRuntime::GNUstep) && (runtime.getVersion() >= VersionTuple(2, 0))) - if (!getToolChain().getTriple().isOSBinFormatELF() && - !getToolChain().getTriple().isOSBinFormatCOFF()) { + if (!getToolChain().getTriple().isOSBinFormatELF()) { getToolChain().getDriver().Diag( diag::err_drv_gnustep_objc_runtime_incompatible_binary) << runtime.getVersion().getMajor(); ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [cfe-branch] r341355 - Add release notes for the new GNUstep Objective-C ABI.
Author: theraven Date: Tue Sep 4 03:40:24 2018 New Revision: 341355 URL: http://llvm.org/viewvc/llvm-project?rev=341355&view=rev Log: Add release notes for the new GNUstep Objective-C ABI. Modified: cfe/branches/release_70/docs/ReleaseNotes.rst Modified: cfe/branches/release_70/docs/ReleaseNotes.rst URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_70/docs/ReleaseNotes.rst?rev=341355&r1=341354&r2=341355&view=diff == --- cfe/branches/release_70/docs/ReleaseNotes.rst (original) +++ cfe/branches/release_70/docs/ReleaseNotes.rst Tue Sep 4 03:40:24 2018 @@ -235,6 +235,14 @@ C++1z Feature Support Objective-C Language Changes in Clang - +Clang now supports the GNUstep Objective-C ABI v2 on ELF platforms. This is +enabled with the `-fobjc-runtime=gnustep-2.0` flag. The new ABI is incompatible +with the older GNUstep ABIs, which were incremental changes on the old GCC ABI. +The new ABI provides richer reflection metadata and allows the linker to remove +duplicate selector and protocol definitions, giving smaller binaries. Windows +support for the new ABI is underway, but was not completed in time for the LLVM +7.0 release. + ... OpenCL C/C++ Language Changes in Clang ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [DataLayout][LangRef] Split non-integral and unstable pointer properties (PR #105735)
davidchisnall wrote: I’m concerned about the semantics of unstable. This sounds like it would impact optimisation of memcmp, for example (is it still allowable to optimise away self comparisons?). I wouldn’t want that added to the LangRef without some clearer description of what optimisers *can* assume. That said, given that it’s a property that’s already present for NI pointers for GC, I suppose we’re stuck with it for now. Note that CHERI LLVM’s use of ptrtoint is largely historical. We worked with the folks doing NI pointers and my plan was to move to them eventually. We didn’t initially have the address-get intrinsic and so we abused ptrtoint for that, but I believe we’ve fixed the places in the front end that do this. When we upstream, we should get rid of that entirely. This also improves optimisation because optimisers treat address-get as non-escaping whereas ptrtoint assumes the pointer may be materialised anywhere else and makes alias analysis conservative. https://github.com/llvm/llvm-project/pull/105735 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits