[Issue 5625] std.format unittest disabled
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Mar 20 03:25:02 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5625
--- Comment #1 from Brad Roberts <braddr at puremagic.com> 2011-03-20 03:21:43 PDT ---
Here's the reduced version of this bug. Larger than I'd like still, but is
proving hard to reduce further.
module bug;
extern(C) int printf(const char *, ...);
struct FormatSpec
{
char spec = 's';
bool flHash = false;
// unused function, but if removed hides the bug
void writeUpToNextSpec(OutputRange)(OutputRange writer) {}
}
void formatValue(long val, ref FormatSpec f)
{
char[] w;
long arg = val;
// always true, but removing conditional hides the bug
uint base = f.spec == 's' ? 10 : 0;
// if moved above base line, or merged with the declaration, hides the bug
arg = -arg;
char buffer[64]; // 64 bits in base 2 at most
uint i = buffer.length;
auto n = cast(ulong) arg;
do
{
--i;
buffer[i] = cast(char) (n % base);
n /= base;
if (buffer[i] < 10)
buffer[i] += '0';
else
buffer[i] += 'A' - 10;
}
while (n);
// unused, but if removed hides the bug;
sizediff_t spacesToPrint = (base == 16 && f.flHash && arg);
// always true, but needs the conditional to show the bug
if (arg)
w = buffer[i .. $];
// the code to append the '-' to w was removable, so '999'
// really is the expected results
printf("w = %.*s\n", w.length, w.ptr);
assert(w == "999");
}
int main()
{
auto spec = FormatSpec();
formatValue(-999L, spec);
return 0;
}
--
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