[Issue 2350] Contracts with a naked body are indecent

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Sep 5 00:24:04 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=2350



--- Comment #2 from Don <clugdbug at yahoo.com.au> 2011-09-05 00:23:54 PDT ---
(In reply to comment #1)
> In which case, what would "naked" do?  If nothing, the compiler ought to
> disallow it.

For non-naked functions, the contracts don't set up a stack frame, because the
function already does it. The generated code is:
 push EBP;
 mov EBP, ESP;
 <run in contract>
 <run function body>
 <run out contract>
 pop EBP;

If no contracts are present, or with -release, the generated code is currently:
 <run naked body>
which is correct.

But if contracts are present, and not in a release build, the code is:
 <run in contract>
 <run naked body>
 <run out contract>
which causes a crash. Correct behaviour would be:

 push EBP;
 mov EBP, ESP;
 <run in contract>
 pop EBP;
 <run naked body>
 push EBP;
 mov EBP, ESP;
 <run out contract>
 pop EBP;

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list