digitalmars.D.bugs - [Issue 2479] New: sformat is broken
- d-bugmail puremagic.com (22/22) Nov 29 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (12/12) May 20 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (33/33) Aug 29 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (12/12) Aug 29 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (32/32) Aug 31 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (10/10) Oct 11 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (25/25) Oct 15 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (8/8) Oct 15 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (27/27) Nov 02 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (11/11) Nov 02 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (10/10) Nov 04 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (7/7) Nov 05 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (15/15) Nov 10 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2479
- d-bugmail puremagic.com (14/14) Feb 13 2011 http://d.puremagic.com/issues/show_bug.cgi?id=2479
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Summary: sformat is broken
Product: D
Version: 2.022
Platform: PC
OS/Version: Windows
Status: NEW
Severity: major
Priority: P2
Component: Phobos
AssignedTo: bugzilla digitalmars.com
ReportedBy: dick221z yahoo.com
char [32] tmp;
sformat(tmp,"hi");
writefln(tmp);
tmp is null after calling sformat. In some other cases an
EXCEPTION_ACCESS_VIOLATION is thrown.
Oddly enough format works fine
The problem seems to be in passing the variable argument list to sformat, the
argptr passed to sformat is null.
Workaround is to go back to 2.021
--
Nov 29 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Gide Nwawudu <gide nwawudu.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
CC| |gide nwawudu.com
Severity|major |regression
Set importance to regression.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 20 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Brad Roberts <braddr puremagic.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |braddr puremagic.com
PDT ---
A reduced test case (larger, but complete and doesn't import large swaths of
code). This is a massive reduction of all the irrelevant parts of doFormat
torn away, and sformat reduced a good bit as well.
module bug2479;
import std.stdarg;
void doFormat(void delegate(dchar) myputc, TypeInfo[] arguments, va_list
argptr)
{
string fmt = va_arg!(string)(argptr);
assert(!(fmt is null)); // fires when it shouldn't.
}
char[] sformat(char[] s, ...)
{
void putc(dchar c) { s[0] = cast(char)c; }
doFormat(&putc, _arguments, _argptr);
return s[0 .. 1];
}
void main()
{
char[32] tmp;
sformat(tmp, "%s", "hi");
}
Changing putc to not touch 's' causes the va_arg call to succeed an fmt is no
longer null.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 29 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479 PDT --- Adding a printf at the top of doFormat... The broken case: argptr = 0xf7ceeffc core.exception.AssertError bug2479.d(11): Assertion failure With putc emptied out: argptr = 0xffb004d4 (no assert) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 29 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |clugdbug yahoo.com.au
Even further reduced, removing all imports. My patch to bug 814 does not fix
this.
------
alias void* va_list;
T va_arg(T)(inout va_list _argptr) {
T arg = *cast(T*)_argptr;
_argptr = _argptr + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1));
return arg;
}
void doFormat(void delegate(dchar) myputc, TypeInfo[] args, va_list
argptr){
string fmt = va_arg!(string)(argptr);
assert(!(fmt is null)); // fires when it shouldn't.
}
char[] sformat(char[] s, ...){
void putc(dchar c) { s[0] = cast(char)c; }
doFormat(&putc, _arguments, _argptr);
return s[0 .. 1];
}
void main(){
char[32] tmp;
sformat(tmp, "%s", "hi");
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 31 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Andrei Alexandrescu <andrei metalanguage.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
CC| |andrei metalanguage.com
AssignedTo|nobody puremagic.com |andrei metalanguage.com
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 11 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|Phobos |DMD
Summary|sformat is broken |Badcode regression: closure
| |corrupts _argptr value
Reduced test case. This does not seem to be a Phobos bug.
If you remove any reference to s from the delegate (so that it stops being a
closure), the code works correctly.
----
void doFormat(void delegate() myputc, void * argptr){
assert(!(*cast(string*)argptr is null));
}
void sformat(string s, ...){
void putc() { assert(s[0]==s[0]); }
doFormat(&putc, _argptr);
}
void main(){
sformat("xxx", "hi");
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 15 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 15 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
I have patched Phobos so that original symptom is fixed.
The compiler bug is that in FuncDeclaration::buildClosure() in toir.c, variadic
arguments aren't supported, but _argptr is set in FuncDeclaration::semantic3()
as if they were.
Partial patch, to turn this from a wrong-code into a rejects-valid bug, until
the bug is actually fixed:
func.c, line 1282.
---
if (argptr)
{ // Initialize _argptr to point past non-variadic arg
#if IN_GCC
// Handled in FuncDeclaration::toObjFile
v_argptr = argptr;
v_argptr->init = new VoidInitializer(loc);
#else
+ // BUG: Fix this in FuncDeclaration::buildClosure() in toir.c.
+ if (needsClosure())
+ error("Closures are not yet supported with variadic arguments
(Bugzilla 2479)");
Type *t = argptr->type;
VarDeclaration *p;
unsigned offset;
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 02 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Leandro Lucarella <llucax gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |llucax gmail.com
PST ---
SVN commit (workarround in Phobos, not a real fix):
http://www.dsource.org/projects/phobos/changeset/1318
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 02 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bugzilla digitalmars.com
20:23:50 PST ---
I'll add a message for now, dmd svn 239.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 04 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479 PST --- Direct link to the SVN commit: http://www.dsource.org/projects/dmd/changeset/239 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 05 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|wrong-code |rejects-valid
AssignedTo|andrei metalanguage.com |nobody puremagic.com
Summary|Badcode regression: closure |Regression: cannot use
|corrupts _argptr value |variadic arguments inside a
| |closure
Was: Badcode regression: closure corrupts _argptr value
In DMD2.036, this is now just a rejects-valid rather than wrong-code.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 10 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2479
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Regression: cannot use |Cannot use variadic
|variadic arguments inside a |arguments inside a closure
|closure |
Severity|regression |normal
Removing the 'regression' keyword, since variadic arguments in closures have
never worked.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 13 2011









d-bugmail puremagic.com 