112 Commits (a8752cd84240f5c15bd9df221d9a4bae5ded4939)

Author SHA1 Message Date
David Chisnall a9a2ed6b10 Refactor to use `objc_method` as the slot.
This change set incorporates a number of changes that all needed to
happen together:

 * The imp is now the first field of the `objc_method` structure.  This
   makes it possible to extend the structure without breaking anything
   that relies on being able to access the IMP.
 * There is no owner in the slot, so we must use other mechanisms for
   determining the owner of a method (e.g. whether the same method appears
   in the superclass)
 * Again, because there is no owner in the slot, we can't use this as a
   fast path for finding the C++ construct / destruct methods.  These are
   now cached in the class structure when they are found.
 * The version field is gone from the slot and now we provide a global
   version.  This is based on the observation that method replacements
   are relatively infrequent and the overhead of invalidating all method
   caches is cheaper than adding extra state for every (class, method)
   pair.
 * A number of the runtime functions are simplified because replacing
   the IMP in a `Method` now implicitly updates the dtable.
8 years ago
David Chisnall 33dc69387e Add test for category methods replacing class methods. 8 years ago
David Chisnall 55a4d763d1 Silence a warning in a test.
The test is doing something unsafe, but which we want to work.
8 years ago
David Chisnall 8b6793aa52 Add a test for forward declared protocols.
Check that a protocol accessed by forward definition in one compilation
unit is the one defined in another compilation unit.
8 years ago
David Chisnall 1dfa6a6785 Explicitly reference a protocol in a test.
With the old ABI, we generated a copy of every protocol in every
compilation unit that declared it.  We now emit protocols only if they
are referenced (and have the linker deduplicate them).

This test was previously failing with the Apple runtime.
8 years ago
David Chisnall 7b8e741f39 Remove a test for a thing that was false.
There is no guarantee that two selectors will be equal.
8 years ago
David Chisnall db5d8f7f64 Don't compile Test.m 122 times.
All tests now link one of a small number of .o files compiled from Test.m.
8 years ago
David Chisnall 91a1baae48 Fix errors made in merging. 8 years ago
David Chisnall 76e7d4b07f Merge branch 'master' into newabi 8 years ago
David Chisnall dc9b8313a4 Rework C++ library detection.
macOS ships with libc++abi, which doesn't provide the hooks required
for interop, so this was causing all of the tests to fail to link in
the Travis macOS test.  We're now correctly detecting that it won't
work on macOS and disabling those tests.
8 years ago
David Chisnall 82b3abf93e Fix test warning on GNU platforms. 8 years ago
David Chisnall f6709519fa Simplify test case some more.
It appears that the problem occurs when throwing an Objective-C
exception through and Objective-C++ frame.
8 years ago
David Chisnall 760bb785aa Rename files.
minRep is not actually an informative name for a test case.
8 years ago
David Chisnall 9115a909b1 Delete more code.
The reduced test case is now fairly close to minimal.
8 years ago
David Chisnall 8f03e62a84 Delete a lot of redundant code. 8 years ago
David Chisnall 1f2d35006b Make the ObjC++ interop test compile 8 years ago
David Lobron c036265ece Remove changes introduced accidentally because I was using an older
version of this file (sync with 0b5f66393a).
8 years ago
David Lobron 44d05e58a6 Minimal reproducing test case. This creates a test number 47 in the unit
test suite, which fails with an exception.  The exception reproduces the
bug.
8 years ago
David Chisnall 79395aebec Refactor test cmake to reduce copying and pasting.
Also ensures that multi-file tests are run in all combinations.
8 years ago
David Chisnall a54272c1ab Merge origin/master into newabi (using imerge) 8 years ago
David Chisnall 0b5f66393a Add test for #32. 9 years ago
David Chisnall 2417ec5806 Remove another unused build-breaking header. 9 years ago
David Chisnall ece31319b5 Remove an unused header include that was breaking the test build if
libobjc is not already installed.
9 years ago
David Chisnall e87b5c1503 Remove an assertion that was useful in debugging, but not actually
correct.

Instance variables are not normally zero-sized, but some are.  Examples
include zero-length arrays at the end of a class, and bitfields.

Fixes #30
Fixes #31
9 years ago
David Chisnall 12d1ea62a4 Merge branch 'master' into newabi 9 years ago
David Chisnall d1eb9ad91e Ensure that asserts in the tests are still run, even in a release build.
Fixes #29
9 years ago
David Chisnall 4fd27a066f When moving ivars to increase their alignment, make sure later ivars are
also moved.

Fixes #27
9 years ago
Niels Grewe 165f1e83bf Additional asserts
Assert that the offset of `isa` is 0 and the offset of `c_string` is
`sizeof(Class)`
9 years ago
Niels Grewe 8c79eb836c Test case for misaligned ivars. 9 years ago
David Chisnall 6df23377a0 Forcibly realign instance variables to take into account the padding
from the reference count.
9 years ago
David Chisnall 9a2f43ca7d Work around the fact that clang 3.4 and earlier emit broken metadata.
This is mostly important because Travis-CI uses an archaic version of
clang for the CI runs.
10 years ago
David Chisnall 8c35e72655 Add missing properties and don’t make a runtime-specific test conditional on OS. 10 years ago
David Chisnall 81ef7a9816 Don’t fail the test if we get more attributes than we expect.
Attribute lists are not null-terminated, so this would previously have gone off into memory that it was not meant to access.
10 years ago
Niels Grewe f264fd159d Fix a segfault on (s|g)etting ivars.
When we were trying to get or set an ivar on a class that had
no ivars defined, we'd dereference a NULL ivar list while
determining the ownership qualifier.
10 years ago
David Chisnall d52db3491a Make the forwarding test use the forward2 hook. 10 years ago
David Chisnall b11779dc19 Fix objc_msgSend test with new names for slot structures. 10 years ago
David Chisnall c3c81796ca Rework slot handling so that the fields that are used for dispatch are
at the start of the structure, making it easier to change the layout in
the future.

Also clean up the growth of various fields and consolidate some of the
metadata into a pointer to the `struct objc_method`.
10 years ago
David Chisnall f55c158be8 First pass at new Objective-C ABI. 10 years ago
Niels Grewe a6e65cea04 Fix typo in test function 10 years ago
David Chisnall 4a59b2a986 Set up the new forwarding hook in the objc_msgSend test.
This is probably wrong, as we should be calling forward2 if forward3 is not set, but it makes the test pass for now.
10 years ago
David Chisnall 5cf6d6ac13 Make the message send test actually test thing things that it's supposed
to.
10 years ago
David Chisnall 8583fc7f61 Explicitly make char signed in the property introspection test. The C spec allows char to be either signed or unsigned. If it’s unsigned (as it is on ARM), then the test will fail with the wrong encoding. 10 years ago
David Chisnall e8e5f1e254 Try calling the IMP directly before calling it indirectly in the block-as-method test.
This makes debugging *much* easier!
10 years ago
David Chisnall 7eeffe9d09 Rewrite the block-to-imp code so that:
- We reuse the memory allocated for blocks
- We no longer have the same physical page mapped write and execute
10 years ago
David Chisnall 0a847e10be Tweak the message sending microbenchmark a bit so that it produces
output compatible with ministat.
10 years ago
David Chisnall 2777fea77a Enable correct behaviour with respect to ARC for objc_{g,s}etIvar(). 10 years ago
David Chisnall 57858add6e Silence warning in test. 10 years ago
David Chisnall dbdc26523c Fix the property introspection test some more. 10 years ago
David Chisnall 5c21e73f26 Fix the property introspection test. 10 years ago
David Chisnall b5e12e914c Make PropertyIntrospectionTest2 use arc.
Recent versions of clang object to weak properties in non-ARC mode.
10 years ago