Repository navigation
stream: make the variadic interface methods final - #60
Merged
Merged
Conversation
InputStream.readf(...), OutputStream.printf(fmt, ...), writef(...) and
writefln(...) are D-style variadic interface methods. For a class that
implements the interface at a non-zero offset (Stream), LDC has to emit
this-adjusting thunks for them and can only forward the variadic
arguments with a `musttail` call. LLVM's PowerPC backend cannot honour
`musttail` there, so compiling the library aborts on ppc64/ppc64le:
LLVM ERROR: failed to perform tail call elimination on a call site
marked musttail
All four are thin forwarders to the non-variadic virtual methods
(vreadf, vprintf, writefx). Make them `final` in the interfaces with
those bodies and drop the identical copies from Stream: final interface
methods are dispatched statically, so no thunk is generated. The API is
unchanged and the methods remain callable through interface references;
customisation still happens by overriding vreadf/vprintf/writefx.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
InputStream.readf(...), OutputStream.printf(fmt, ...), writef(...) and
writefln(...) are D-style variadic interface methods. For a class that
implements the interface at a non-zero offset (Stream), LDC has to emit
this-adjusting thunks for them and can only forward the variadic
arguments with a
musttailcall. LLVM's PowerPC backend cannot honourmusttailthere, so compiling the library aborts on ppc64/ppc64le:All four are thin forwarders to the non-variadic virtual methods
(vreadf, vprintf, writefx). Make them
finalin the interfaces withthose bodies and drop the identical copies from Stream: final interface
methods are dispatched statically, so no thunk is generated. The API is
unchanged and the methods remain callable through interface references;
customisation still happens by overriding vreadf/vprintf/writefx.