Thread overview
[Issue 8887] New: static arrays should not be passed by value in extern C/C++ functions
Oct 24, 2012
Andrej Mitrovic
[Issue 8887] static arrays passed by value in extern C/C++ functions should not compile
Nov 05, 2012
Andrej Mitrovic
October 24, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8887

           Summary: static arrays should not be passed by value in extern
                    C/C++ functions
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: andrej.mitrovich@gmail.com
        ReportedBy: andrej.mitrovich@gmail.com


--- Comment #0 from Andrej Mitrovic <andrej.mitrovich@gmail.com> 2012-10-24 13:01:56 PDT ---
extern(C) void fail(int[4] x);
extern(C) int[4] fail2();
extern(C++) void fail3(int[4] x);
extern(C++) int[4] fail4();

These should fail since C/C++ compilers always pass arrays by pointer to first element.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 05, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8887


Andrej Mitrovic <andrej.mitrovich@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WONTFIX


--- Comment #1 from Andrej Mitrovic <andrej.mitrovich@gmail.com> 2012-11-04 16:32:34 PST ---
Walter has rejected this. https://github.com/D-Programming-Language/dmd/pull/1215#issuecomment-9770031

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 05, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8887


bearophile_hugs@eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs@eml.cc


--- Comment #2 from bearophile_hugs@eml.cc 2012-11-04 16:48:28 PST ---
From Walter: https://github.com/D-Programming-Language/dmd/pull/1215#issuecomment-9770031

> This change breaks existing code,

What existing code? (And the D1 code that relies on is now broken).


> requires an awkward workaround for existing uses,

Even if they exist they are niche usages, right? It's better to keep the D semantics saner/cleaner. As Python Zen says, few special cases are not special enough to justify this hole in the D type system.

In D it's important not just to fix holes in the design of C, but also holes coming from changes between D1 and D2. I think this type system hole was an oversight while D2 fixed-sized array semantics argument pass changed.


> and has only a marginal benefit.

The benefit is helping all future C programmers that don't remember that D passes fixed-sized arrays by value, for years and years to come. From my experience I've seen that lot of people don't remember that.

Those C programmers will write extern(C) and they will come in the D.learn group to ask why their code doesn't work. I will try to keep count how many such posts will appear in D.learn.

One of the design rules of D is that D acts as C or it gives an error. In this case it silently passes wrong data to C functions, so here there's a breaking of the D design rules.

So I think this hole should be fixed.

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