This repository was archived by the owner on Feb 8, 2024. It is now read-only.
forked from dlang/druntime
-
Notifications
You must be signed in to change notification settings - Fork 28
Fix vararg ABI #14
Merged
+158
−333
Merged
Fix vararg ABI #14
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
a0a4e3d
Win64: fix vararg ABI for extern(C)
kinke a7cf630
Experimental generic vararg ABI fix & clean-up.
kinke 6028120
core.stdc.stdarg: re-add support for System V AMD64 ABI.
kinke a8a7cd6
System V AMD64 fix: LLVM's va_arg intrinsic isn't fully usable yet.
kinke 78b0712
core.stdc.stdarg: fix va_arg() for x86 platform.
kinke File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
This file contains 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
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd rather actually make this
__va_list*
or something so that code that assumes x86-style variadics just doesn't compile instead of crashing horribly at runtime.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm I see the point, but there's a problem with the hidden argptr. It is currently defined as
Type::tvalist
, i.e., char, seegen/target.cpp:81
. If we change it to a hardcodedcore.vararg.__va_list_
for System V, I guess the user must import core.vararg when implementing a variadic extern(D) function, even when not accessing _argptr at all.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, I see the problem. We should probably fix this at some point by moving
__va_list
intoobject
and properly initializingType::tvalist
, but that can wait for now.