View mode: basic / threaded / horizontal-split · Log in · Help
December 30, 2012
[Issue 9244] New: union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244

          Summary: union containing pointers not allowed
          Product: D
          Version: D2
         Platform: x86
       OS/Version: Windows
           Status: NEW
         Severity: normal
         Priority: P2
        Component: DMD
       AssignedTo: nobody@puremagic.com
       ReportedBy: rtcvb32@yahoo.com


--- Comment #0 from Era Scarecrow <rtcvb32@yahoo.com> 2012-12-29 20:40:55 PST ---
Silently enters 'void* this;' pointer making compiling error out. Current beta
(v2.061, windows 32bit)

Only by using traits will the problem show itself.

[code]
 static assert(__traits(compiles, {
   union xxx {
   int i;
   //bitfields will make such functions...
   mixin("int geti() @safe const nothrow pure {return i;}void seti(int ii)
@safe pure nothrow {i = ii;}");
   }
 }));
[/code]

output:

test.d(??): Error: static assert  (__traits(compiles,delegate pure nothrow
@safe void()
{
union xxx
{
int i;
mixin("int geti() @safe const nothrow pure {return i;}void seti(int ii) @safe
pure nothrow {i = ii;}");
void* this;
}
}
)) is false

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 30, 2012
[Issue 9244] union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244


Jonathan M Davis <jmdavisProg@gmx.com> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
                CC|                            |jmdavisProg@gmx.com


--- Comment #1 from Jonathan M Davis <jmdavisProg@gmx.com> 2012-12-29 23:03:21 PST ---
If this is a regression, it needs to be marked as such.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 14, 2013
[Issue 9244] union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244


yebblies <yebblies@gmail.com> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
          Keywords|                            |rejects-valid
                CC|                            |yebblies@gmail.com
          Platform|x86                         |All
        OS/Version|Windows                     |All
          Severity|normal                      |regression


--- Comment #2 from yebblies <yebblies@gmail.com> 2013-01-14 22:49:46 EST ---
Reduced:

void main()
{
   union U {
       int i;
       @safe int x() { return i; }
   }
}

Because U has a function in it, dmd incorrectly decides it is a nested union
and (even worse) inserts a void* member.

A regression because:
- @safe code didn't always disallow unions with pointers
- wrapping x in an attribute such as @safe used to make the compiler infer U as
non-nested

Workaround: make U static

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 01, 2013
[Issue 9244] union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244


Walter Bright <bugzilla@digitalmars.com> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
                CC|                            |bugzilla@digitalmars.com


--- Comment #3 from Walter Bright <bugzilla@digitalmars.com> 2013-02-01 00:08:07 PST ---
https://github.com/D-Programming-Language/dmd/pull/1591

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 01, 2013
[Issue 9244] union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244



--- Comment #4 from github-bugzilla@puremagic.com 2013-02-01 14:07:06 PST ---
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/0e21647a30c50e02e4a9ce43ee7e891a41d7c255
fix Issue 9244 - union containing pointers not allowed

https://github.com/D-Programming-Language/dmd/commit/95a3f5ff979f40ff0e7ae459b8d9786d64f901a7
Merge pull request #1591 from WalterBright/b46

fix Issue 9244 - union containing pointers not allowed

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 01, 2013
[Issue 9244] union containing pointers not allowed
http://d.puremagic.com/issues/show_bug.cgi?id=9244


Walter Bright <bugzilla@digitalmars.com> changed:

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


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Top | Discussion index | About this forum | D home