Jump to page: 1 2
Thread overview
DMD-0.123 introduced bug
May 13, 2005
Andrew Fedoniouk
May 14, 2005
Walter
May 14, 2005
Andrew Fedoniouk
May 14, 2005
Thomas Kuehne
May 16, 2005
Stewart Gordon
May 16, 2005
Andrew Fedoniouk
May 17, 2005
Stewart Gordon
May 17, 2005
Thomas Kuehne
May 18, 2005
Stewart Gordon
May 18, 2005
Stewart Gordon
May 19, 2005
Walter
May 13, 2005
Following:

struct Two // <<<<<<<<<<<<<
{
  int i;
}

static Two[12] Twos = [];

int main(char[][] argv)
{
  return 0;
}

reports:

test.d(3): non-constant expression _init_4test3Two
test.d(3): non-constant expression _init_4test3Two
... 12 times ...

Harmonia is broken :(


May 14, 2005
"Andrew Fedoniouk" <news@terrainformatica.com> wrote in message news:d63bn0$11v$1@digitaldaemon.com...
> Following:
>
> struct Two // <<<<<<<<<<<<<
> {
>   int i;
> }
>
> static Two[12] Twos = [];

static Two[12] Twos;

> int main(char[][] argv)
> {
>   return 0;
> }
>
> reports:
>
> test.d(3): non-constant expression _init_4test3Two
> test.d(3): non-constant expression _init_4test3Two
> ... 12 times ...
>
> Harmonia is broken :(


May 14, 2005
"Andrew Fedoniouk" <news@terrainformatica.com> wrote in message news:d63bn0$11v$1@digitaldaemon.com...

> static Two[12] Twos = [];

This is really the line that's causing the problem (looks like another funky error line diagnosis).

I suppose it's legal syntax, but is there any reason you need the =[] part? They are all initialized to 0 anyway.  So for the time being, you can write

static Two[12] Twos;

Although I'm not sure what that error is supposed to mean, or why the compiler is flagging it as such.


May 14, 2005
"Walter" <newshound@digitalmars.com> wrote in message news:d63qb4$b01$1@digitaldaemon.com...
>
> "Andrew Fedoniouk" <news@terrainformatica.com> wrote in message news:d63bn0$11v$1@digitaldaemon.com...
>> Following:
>>
>> struct Two // <<<<<<<<<<<<<
>> {
>>   int i;
>> }
>>
>> static Two[12] Twos = [];
>
> static Two[12] Twos;

I know, but suppose I have (close to real situation)

static Two[12] Twos =
[
  2: { 2 },
  4: { 4 }
];

Compiler will not like this too.
This time it will repeat error message 10 times - for each
ommited element.

And this is close to example you wrote in Arrays
chapter in the Doc. See: array static initialization.

Also:
http://dstress.kuehne.cn/nocompile/array_initialization_11.d
will not compile for the same reason I believe.
This poped up in .123.

Andrew.




May 14, 2005
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Andrew Fedoniouk schrieb am Fri, 13 May 2005 21:46:04 -0700:
> "Walter" <newshound@digitalmars.com> wrote in message news:d63qb4$b01$1@digitaldaemon.com...
>>
>> "Andrew Fedoniouk" <news@terrainformatica.com> wrote in message news:d63bn0$11v$1@digitaldaemon.com...
>>> Following:
>>>
>>> struct Two // <<<<<<<<<<<<<
>>> {
>>>   int i;
>>> }
>>>
>>> static Two[12] Twos = [];
>>
>> static Two[12] Twos;
>
> I know, but suppose I have (close to real situation)
>
> static Two[12] Twos =
> [
>   2: { 2 },
>   4: { 4 }
> ];
>
> Compiler will not like this too.
> This time it will repeat error message 10 times - for each
> ommited element.
>
> And this is close to example you wrote in Arrays
> chapter in the Doc. See: array static initialization.
>

Added to DStress as http://dstress.kuehne.cn/run/a/array_initialization_15.d

Thomas


-----BEGIN PGP SIGNATURE-----

iD8DBQFChaiO3w+/yD4P9tIRAjt5AJ9LvRh1sqdjg+gDoAwTejkyu//CqwCguz3J
FreaxhLS4kafOM7slpheSNQ=
=TDh0
-----END PGP SIGNATURE-----
May 16, 2005
Thomas Kuehne wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Andrew Fedoniouk schrieb am Fri, 13 May 2005 21:46:04 -0700:
> 
>>"Walter" <newshound@digitalmars.com> wrote in message news:d63qb4$b01$1@digitaldaemon.com...
>>
>>>"Andrew Fedoniouk" <news@terrainformatica.com> wrote in message
>>>news:d63bn0$11v$1@digitaldaemon.com...
<snip>
>>>>static Two[12] Twos = [];
>>>
>>>static Two[12] Twos;

AIUI the point the OP is making is that the error message makes no sense.

This is an instance of initialising an array with an empty array.  This code succeeds (gdc 0.11 Mac):

----------
int[] data = [];

void main() {
    assert (data.length == 0);
    assert (data.ptr != null);
}
----------

though should the latter assert really be guaranteed?

But do see below....

<snip>
> Added to DStress as
> http://dstress.kuehne.cn/run/a/array_initialization_15.d

Should be nocompile.  The bug is a bad error line number.

http://www.digitalmars.com/d/arrays.html

"If any members of an array are initialized, they all must be. This is to catch common errors where another element is added to an enum, but one of the static instances of arrays of that enum was overlooked in updating the initializer list."

Though it would be nice to have a syntax like

    int[6] data = [ 2: 4, 3: 9, 5: 3, default: int.init ];

to indicate that you really intended to leave some members otherwise uninitialised.

Stewart.

-- 
My e-mail is valid but not my primary mailbox.  Please keep replies on the 'group where everyone may benefit.
May 16, 2005
>
> AIUI the point the OP is making is that the error message makes no sense.
>
> This is an instance of initialising an array with an empty array.  This code succeeds (gdc 0.11 Mac):
>
> ----------
> int[] data = [];
>
> void main() {
>     assert (data.length == 0);
>     assert (data.ptr != null);
> }
> ----------
>
> though should the latter assert really be guaranteed?
>
> But do see below....
>
> <snip>
>> Added to DStress as http://dstress.kuehne.cn/run/a/array_initialization_15.d
>
> Should be nocompile.  The bug is a bad error line number.
>
> http://www.digitalmars.com/d/arrays.html
>
> "If any members of an array are initialized, they all must be. This is to catch common errors where another element is added to an enum, but one of the static instances of arrays of that enum was overlooked in updating the initializer list."
>

In fact I do not understand this statement in doc.
Does it only about static arrays defined by enums?

Take a look on the same page in doc but two
lines above:

Static Initialization of Static Arrays
int[3] a = [ 1:2, 3 ];		// a[0] = 0, a[1] = 2, a[2] = 3
This example tell us completely different story. Right?> Though it would be
nice to have a syntax like> >     int[6] data = [ 2: 4, 3: 9, 5: 3, default:
int.init ];> > to indicate that you really intended to leave some members
otherwise
> uninitialised.

Agree. A bit redundant in my opinion.
I thought that introducing of init values in D was exactly for such cases.
And this is just enough, imho.

Andrew.


May 17, 2005
Andrew Fedoniouk wrote:
<snip>
>>"If any members of an array are initialized, they all must be. This is to catch common errors where another element is added to an enum, but one of the static instances of arrays of that enum was overlooked in updating the initializer list."
> 
> In fact I do not understand this statement in doc.
> Does it only about static arrays defined by enums?

The first sentence of that paragraph is arrays in general.  *Then* it goes on to talk about arrays that parallel enums.

> Take a look on the same page in doc but two
> lines above:
> 
> Static Initialization of Static Arrays
> int[3] a = [ 1:2, 3 ];		// a[0] = 0, a[1] = 2, a[2] = 3
<snip>
> Agree. A bit redundant in my opinion.
> I thought that introducing of init values in D was exactly for such cases.
> And this is just enough, imho.

But D also aims to eliminate bugs.  An incomplete initialisation of an array is an example of something likely to be a bug.  On the other hand, no initialisation at all is (to me at least) a sign that you want the default initialisers to take effect.

Stewart.

-- 
My e-mail is valid but not my primary mailbox.  Please keep replies on the 'group where everyone may benefit.
May 17, 2005
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Stewart Gordon schrieb am Mon, 16 May 2005 11:35:35 +0100: <snip><snip>

>> Added to DStress as http://dstress.kuehne.cn/run/a/array_initialization_15.d
>
> Should be nocompile.  The bug is a bad error line number.

What would be the correct error message for array_initialization_15?

Thomas

-----BEGIN PGP SIGNATURE-----

iD8DBQFCii7c3w+/yD4P9tIRAq8sAKDS72PgqCE36CIq44TGnMNVXB4wlACgvhTI
RisGfqtqWPDtbki98MoKm0g=
=9Uao
-----END PGP SIGNATURE-----
May 18, 2005
Stewart Gordon wrote:
<snip>
> Though it would be nice to have a syntax like
> 
>     int[6] data = [ 2: 4, 3: 9, 5: 3, default: int.init ];
<snip>

Even simply

    int[6] data = [ 2: 4, 3: 9, 5: 3, default ];

meaning use the default initialiser.  Syntactic salt and sugar in one.

Stewart.

-- 
My e-mail is valid but not my primary mailbox.  Please keep replies on the 'group where everyone may benefit.
« First   ‹ Prev
1 2