digitalmars.D.bugs - [Issue 4593] New: (DMD 2.047) std.string.split + unittest build = Access Violation
- d-bugmail puremagic.com (53/53) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (35/35) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (10/10) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (7/7) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (57/57) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (13/13) Aug 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
- d-bugmail puremagic.com (11/11) Aug 11 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4593
http://d.puremagic.com/issues/show_bug.cgi?id=4593
Summary: (DMD 2.047) std.string.split + unittest build = Access
Violation
Product: D
Version: D2
Platform: Other
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: epi atari8.info
Hi,
I encountered a strange problem that appears when I build my project with
-unittest switch on.
The executable fails giving a message "object.Error: Access Violation",
despite that without "-unittest" it works correctly.
I tried to successively cut different parts of code to find a source of
problem, and I came up with an example which may be close to a minimal one.
It consists of two files, "a.d":
-------------------------
import std.string;
import std.stdio;
static string foo(string path)
{
auto strs = path.split(".");
return strs.length ? strs[$ - 1] : "";
}
-------------------------
and "b.d":
-------------------------
import std.stdio;
import a;
void main()
{
writeln("Hello, world!");
}
-------------------------
Compile it using:
dmd -oftest.exe -unittest a.d b.d
and then launch it, and you'll see the "Access violation" message.
However, when you drop -unittest switch, or replace `path.split(".")' with, for
example, `[ "" ]', or merge both sources together into a single source file,
the program displays "Hello, world!" as expected.
I have no idea what could be the actual source of problem, but I hope the
example can help fixing it.
Regards,
Adrian Matoga
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593
Andrej Mitrovic <andrej.mitrovich gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |andrej.mitrovich gmail.com
11:32:05 PDT ---
I can't reproduce this on XP SP3, the output is fine for me:
b.d
--------------------------------
import std.stdio;
import a;
void main()
{
writeln("Hello, world!");
writeln(foo("some.path"));
}
--------------------------------
a.d
--------------------------------
import std.string;
import std.stdio;
static string foo(string path)
{
auto strs = path.split(".");
return strs.length ? strs[$ - 1] : "";
}
--------------------------------
C:\Test>dmd -oftest.exe -unittest a.d b.d
C:\Test>test
Hello, world!
path
Same thing when using a unittest block in b.d.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593
Adrian Matoga <epi atari8.info> changed:
What |Removed |Added
----------------------------------------------------------------------------
Platform|Other |x86_64
Mhm, on XP SP3 it works fine for me also. But on Win7 (x86_64)
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593 12:50:29 PDT --- I'm not sure if DMD is fully supported on x64 yet(?) Someone else will have to fill in. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593
Hmm, this seems to be a lot more subtle thing.
Could you try the following:
image.d:
--------------------
import std.string;
import std.contracts;
import std.conv;
interface Image
{
static Image open(string path, string type, bool readOnly = true)
{
auto img = newObj(path, type);
img.openImpl(path, readOnly);
return img;
}
static Image open(string path, bool readOnly = true)
{
return open(path, autoType(path), readOnly);
}
protected:
void openImpl(string path, bool readOnly);
private:
static Image newObj(string path, string type)
{
auto image = cast(Image) Object.factory(tolower(type) ~ "." ~
capitalize(type) ~ "Image");
version (unittest)
{
if (image is null)
image = cast(Image) Object.factory("image." ~ capitalize(type)
~ "Image");
}
enforce(image, "Unknown image format: " ~ type);
return image;
}
static string autoType(string path)
{
auto sp = path.split(".");
return sp.length ? sp[$ - 1] : "";
}
}
--------------------
main.d
--------------------
import std.stdio;
void main()
{
writeln("Hello world!");
}
--------------------
dmd -oftest.exe -unittest main.d image.d
For me, this also fails on XP SP3 (x86).
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593
14:00:10 PDT ---
You forgot to put an import to image in main.d . Without it, I'll get that
object error thing. Otherwise, this will work fine:
import image;
import std.stdio;
void main()
{
writeln("Hello world!");
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4593
Adrian Matoga <epi atari8.info> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Seems like it's fixed now with 2.048.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 11 2010









d-bugmail puremagic.com 