Commit Graph

618 Commits

Author SHA1 Message Date
Mike Ash
4440bd4977 Merge pull request #40055 from mikeash/swift-inspect-dump-arrays
[swift-inspect] Add a command to dump information about allocated arrays in the target process.
2021-11-18 20:50:12 -05:00
swift-ci
aaa2b056d1 Merge remote-tracking branch 'origin/main' into rebranch 2021-11-18 08:33:49 -08:00
Alastair Houghton
8e56ff7da0 Merge pull request #39922 from al45tair/problem/84615816
[Tests][Demangling] Reduce maximum recursion depth for NodePrinter.
2021-11-18 16:21:50 +00:00
Ben Barham
25b1b2517e [rebranch] Replace LLVM_ATTRIBUTE_NORETURN with [[noreturn]]
llvm-project 09529892b518c8df8c24395e68e0a7a5e8bda5fb removed
`LLVM_ATTRIBUTE_NORETURN` in favour of the C++11 `[[noreturn]]`.
2021-11-18 16:49:28 +10:00
Robert Widmann
924d15b03f [NFC] Swap LLVM_NODISCARD for LLVM_ATTRIBUTE_NORETURN
These were originally meant to be no-return functions since they're going to abort. They were accidentally changed to no-discard functions despite not having a return value.
2021-11-17 13:17:37 -08:00
Mike Ash
9fa76e2f4f [swift-inspect] Add a command to dump information about allocated arrays in the target process. 2021-11-04 16:15:15 -04:00
Alastair Houghton
50c55ce4d9 [Tests][Demangling] Reduce maximum recursion depth for NodePrinter.
At MaxDepth 1024, NodePrinter will blow the stack on a debug build.
Reduce it to 768.

rdar://84615816
2021-10-26 17:12:14 +01:00
zoecarver
2546406de8 [cxx-interop][nfc] Remove internal header dependency on runtime/stdlib/shims.
The internal compiler headers should not include swift shim headers. Removing this dependency allows libSwift to import Swift compiler headers (otherwise, we get name conflics, because we import SwiftShims headers twice: from the source includes and build includes).
2021-10-25 14:56:45 -07:00
Doug Gregor
142973b653 Use a non-conflicting mangling for distributed thunks.
Distributed thunks were using the same mangling as direct method
reference thunks (i.e., for "super" calls). Although not technically
conflicting so long as actors never gain inheritance, it's confusing
and could cause problems in the future. So, introduce a distinct
mangling for distributed thunks and plumb them through the demangling
and remangler.
2021-10-15 23:15:43 -07:00
Kuba (Brecka) Mracek
557bf685be Don't include support for old mangling in runtimes without ObjC interop (#39675) 2021-10-13 19:47:05 -07:00
Alastair Houghton
5c00c7e0fa Merge pull request #39506 from al45tair/problem/82870372
[Remangler] Fix remangling in static bound generic function context
2021-10-02 09:26:24 +01:00
Kuba Mracek
d0e05003f5 For individual runtime records for types/protocols/conformances, add and use new mangling suffixes 2021-09-29 13:14:58 -07:00
Alastair Houghton
1ac9159a81 [Remangler] Fix remangling of items in static bound generic function context
If you had a type alias (for instance) with its context set to a static
bound generic function, the generic arguments were remangled in the wrong
place because Node::Kind::Static wasn't handled properly in a couple of
functions.  Fix that.

rdar://82870372
2021-09-29 14:27:31 +01:00
Alastair Houghton
8be084f30a Merge pull request #39187 from al45tair/problem/79725187
[Demangler] Improve remangler error handling
2021-09-27 17:03:49 +01:00
Kuba (Brecka) Mracek
80519fb7e2 Avoid using system isdigit in favor of swift::Mangle::isDigit (#39382) 2021-09-21 17:36:18 -07:00
Doug Gregor
7f2117690c Skip standard substitutions for _Concurrency types when back-deploying.
When back-deploying concurrency support, do not use the standard
substitutions for _Concurrency-defined types (such as `Task`) in type
metadata because older Swift runtimes will not be able to demangle
them. Instead, use the full mangled names so the runtime can still
demangle them appropriately.

Addresses rdar://82931890.
2021-09-09 13:23:19 -07:00
Alastair Houghton
59cfe356d5 [Demangling] Improve DEMANGLE_ASSERT, enable some disabled tests.
Defining DEMANGLE_ASSERT as assert() is simple but messes up the file/line
information from assert().  Make a dedicated assertion failure function and use
that instead to fix.

Also enable some tests that were disabled because they triggered abort()
calls in the remanglers.

rdar://79725187
2021-09-07 14:08:29 +01:00
Alastair Houghton
b8a879954a [Demangler] Tidy up a bit, and add line numbers to ManglingErrors.
Because DEMANGLER_ASSERT() might cause the remanglers to return a ManglingError
with the code ManglingError::AssertionFailed, it's useful to have a line number
in the ManglingError as well as the other information.  This is also potentially
helpful for other cases where the code is used multiple times in the remanglers.

rdar://79725187
2021-09-06 17:49:55 +01:00
Alastair Houghton
227b438963 [Demangling] Added DEMANGLER_ASSERT to replace assert() calls.
This returns an error code if we're in the runtime, rather than assert()ing.

rdar://79725187
2021-09-06 17:49:50 +01:00
Alastair Houghton
cc869b90b1 [Demangling] Remangling error handling for the OldRemangler.
First pass at adding error handling to the OldRemangler.  Still pondering
assert() calls.

rdar://79725187
2021-09-06 17:49:09 +01:00
Alastair Houghton
fbf082b6cb [Demangling] Make Demangle::getUnspecialized() return errors too.
This lets us completely remove the unreachable() function from Remangler.cpp.

rdar://79725187
2021-09-06 17:49:09 +01:00
Alastair Houghton
fc3322f9fc [Demangling] More remangler error handling.
First pass at adding error handling to the actual Remangler.  There are
still some assert() calls at this point that I'm thinking about.

rdar://79725187
2021-09-06 17:49:09 +01:00
Alastair Houghton
3f01f853a6 [Demangling] Add error handling to the remangler.
Mangling can fail, usually because the Node structure has been built
incorrectly or because something isn't supported with the old remangler.
We shouldn't just terminate the program when that happens, particularly
if it happens because someone has passed bad data to the demangler.

rdar://79725187
2021-09-06 17:49:09 +01:00
Alastair Houghton
e6ced29908 [Demangler] Fix incorrect assertions in OldRemangler and NodePrinter.
There can be, currently, up to eight child nodes for a FunctionType.
OldRemangler seemed to think there could only be three, while NodePrinter
plumped for six.

rdar://82252704
2021-08-27 11:24:19 +01:00
Alastair Houghton
4b2e31654e [Demangler][Tests] Re-add getObjcClassByMangledName test.
This was reverted in ec3ccd72 because it broke the iOS simulator build.
2021-08-17 09:46:21 +01:00
Mishal Shah
34350e45cd Revert "[Demangler][Tests] Add an explicit test for getObjCClassByMangledName." 2021-08-16 14:00:39 -07:00
Alastair Houghton
8db56f09a3 [Demangler][Tests] Add an explicit test for getObjCClassByMangledName.
Added a special test for getObjCClassByMangledName; this needs testing
separately as it uses the DecodedMetadataBuilder, which doesn't get exercised
by the normal demangling tests.

Added all the test cases from rdar://63485806, rdar://63488139, rdar://63496478,
rdar://63410196 and rdar://68449341.  The test cases from rdar://63485806 are
disabled for now because the problem there is the error handling mechanism (or
lack thereof), rather than us not handling errors.

Fixes the remaining cases from

rdar://63488139
rdar://63496478
2021-08-04 16:21:32 +01:00
Alastair Houghton
f15c2a7848 Merge pull request #38429 from al45tair/problem/80602920
[Demangler] Fix NULL dereference on malformed mangled class name.
2021-07-28 14:18:36 +01:00
Alastair Houghton
95be0d6503 Merge pull request #37997 from al45tair/problem/63678072
[Demangler] Fix OldRemangler to cope with single argument functions.
2021-07-28 14:15:46 +01:00
Alastair Houghton
c23d2f45c4 [Demangler] Fix NULL dereference on malformed mangled class name.
The (invalid) type name '__TJO' caused a NULL dereference.  Fix that
and add a test case.

rdar://80602920
2021-07-16 14:19:35 +01:00
Alastair Houghton
ad6a6e4656 Merge pull request #38270 from al45tair/problem/74394596
[Demangler] Make isSpecialized() more robust.
2021-07-08 16:22:00 +01:00
Evan Wilde
191dc14c59 Merge pull request #38171 from etcwilde/ewilde/remove-extraneous-isSerialized
[NFC] Remove 'isSerialized' from NodePrinter
2021-07-07 11:20:03 -07:00
Alastair Houghton
52ec3d195a Merge branch 'main' into problem/63678072 2021-07-07 07:15:22 +01:00
Alastair Houghton
2f4793c968 [Demangler] Make isSpecialized() more robust.
We've had a couple of instances where isSpecialized() crashed while while trying
to use remote mirror to inspect a process that had itself crashed.  I can't see
any obvious mechanism for that to happen, so for now I decided to make
isSpecialized() more robust in the hope that if it happens again we'll get more
information and might be able to work out how it happened.

rdar://74394596
2021-07-06 12:03:31 +01:00
Alastair Houghton
779b10daeb [Demangler] Fix OldRemangler's handling of Subscript nodes.
The Subscript node isn't laid-out the way the code in OldRemangler thinks,
which has the unfortunate result of causing crashes.

rdar://63410196
2021-07-02 11:40:20 +01:00
Alastair Houghton
7b56178354 [Demangler] Fix build breakage caused by merging two PRs that clashed. 2021-07-01 17:46:00 +01:00
Alastair Houghton
8078cc0c73 Merge pull request #38079 from al45tair/problem/63485806
[Demangler] Fix the name of float vector types in OldDemangler.
2021-07-01 16:54:49 +01:00
Alastair Houghton
deccb339a0 Merge pull request #37998 from al45tair/problem/63678171
[Demangler] Fix OldRemangler to cope with Type nodes
2021-07-01 15:48:31 +01:00
Alastair Houghton
8f717d2c50 [Demangler] Prevent stack overflow by limiting recursion depth.
It's trivially easy to drive the remanglers, the type decoder and the node
printer into a situation where they will overflow the process's stack.  For the
compiler, this is fine (though not great), but for the runtime it's a no-no.

This changeset imposes recursion depth limits to prevent uncontrolled stack
overruns.

rdar://68449341
2021-07-01 11:11:59 +01:00
Evan Wilde
353dba2635 [NFC] Remove 'isSerialized' from NodePrinter
'isSerialized' is tracked, but never actually used in
NodePrinter::print.

Was introduced in bc119d0d6d.
2021-06-29 14:38:44 -07:00
Alastair Houghton
226c36e861 Merge branch 'main' into problem/63678171 2021-06-25 11:36:55 +01:00
Alastair Houghton
d57cedd7d8 Merge branch 'main' into problem/63678072 2021-06-25 11:36:26 +01:00
Alastair Houghton
7cc10536cc [Demangler] Fix the name of float vector types in OldDemangler.
The OldDemangler was still spelling Builtin.Vec4xFPIEEE16 as
Builtin.Vec4xFloat16, which meant that feeding its output to the new
Remangler caused it to fail with "fatal error: unexpected builtin
vector type".

rdar://63485806
2021-06-24 14:39:25 +01:00
Alastair Houghton
4661deba27 [Demangler] Fix for crash in mangleSingleChildNode.
PartialApplyForwarders can apparently have no children in some cases,
so avoid calling mangleSingleChildNode() if that happens in order to avoid
a crash.

rdar://63678141
2021-06-21 15:51:35 +01:00
Alastair Houghton
35db37f941 [Demangler] Fix OldRemangler to cope with Type nodes in a couple of places.
The Demangler can wrap types in a Node::Kind::Type node; these need to be
handled by following the node's first child pointer.  Failing to do this led to
a crash or assertion failure in some cases.

rdar://63678171
2021-06-21 10:19:24 +01:00
Alastair Houghton
d70e93b92e [Demangler] Fix OldRemangler to cope with single argument functions.
The Demangler can sometimes output ArgumentTuples containing a single argument
without placing that argument inside a Tuple node.  OldRemangler failed to take
account of this and either crashed or failed with an assertion failure depending
on whether assertions were enabled or not.

rdar://63678072
2021-06-19 10:20:02 +01:00
Doug Gregor
58f49692ed Add mangling, metadata, and reflection support for "isolated" parameters.
Isolated parameters are part of function types. Encode them in function
type manglings and metadata, and ensure that they round-trip through
the various mangling and metadata facilities. This nails down the ABI
for isolated parameters.
2021-06-08 00:00:11 -07:00
Alastair Houghton
3d11fb97ab [SR-13466]: Fix demangling of optionals containing function types.
ImplFunctionType nodes inside optionals are wrapped in Type nodes,
which means that isSimpleType() needs to look through the Type node
when we're printing them, or we fail to wrap them with parentheses.

<rdar://67915116>
2021-06-04 20:56:51 +01:00
Doug Gregor
b814e225dd Implement (de-)mangling and type metadata for global actor function types.
Implement name mangling, type metadata, runtime demangling, etc. for
global-actor qualified function types. Ensure that the manglings
round-trip through the various subsystems.

Implements rdar://78269642.
2021-06-02 23:34:22 -07:00
Doug Gregor
b57a73ab42 [Concurrency ABI] Add standard substitutions for _Concurrency types.
Introduce a second level of standard substitutions to the mangling,
all of the form `Sc<character>`, and use it to provide standard
substitutions for most of the _Concurrency types.

This is a precursor to rdar://78269642 and a good mangling-size
optimization in its own right.
2021-06-01 17:15:02 -07:00