[llvm-branch-commits] [clang] d1ed670 - [GNU ObjC] Fix a regression listing methods twice.

2020-12-01 Thread David Chisnall via llvm-branch-commits

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.

2018-09-04 Thread David Chisnall via llvm-branch-commits
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.

2018-09-04 Thread David Chisnall via llvm-branch-commits
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)

2024-10-30 Thread David Chisnall via llvm-branch-commits

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