D.gnu - [bug?] executable segfaults
- Manfred Nowak (43/43) Jan 25 2005 I have not compared stage2 and stage3 of the compiler built. So it is
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (7/12) Jan 26 2005 The code works fine (with m.empty();) on Linux
- David Friedman (6/60) Jan 27 2005 I'm not getting the problem on Cygwin or Darwin, but I haven't tried
- Manfred Nowak (20/30) Jan 30 2005 This is wrong. Instead it should be used:
- Manfred Nowak (5/6) Jan 30 2005 Reverted to the version that currently is distributed with cygwin, i.e.
I have not compared stage2 and stage3 of the compiler built. So it is
possible that the compiler is broken.
<code>
// executable segfaults if line 43 is uncommented
// gdc (GCC) 3.4.4 20050121 (prerelease) under cygwin
// flawless run when compiled from dmd.0.111.win32
module set;
class Set( Base, Value=bit){
Value[ Base] data;
int opApply(int delegate(inout Base b, inout Value v) dg){
printf("[opApply ");
int result = 0;
for (int i = 0; i < data.length; i++) {
result = dg(i, data[i]);
if( result) break;
}
printf("]");
return result;
}
void empty(){
foreach( Base b, Value v; data){
delete data[ b];
}
}
void include( Base b){
data[ b]= data[ b];
}
}
void main(){
printf("[main ");
alias char[] String;
alias Set!( int) InstSet;
InstSet m= new InstSet;
m.include( 1);
printf("%d ", m.data.length);
//m.empty();
printf("%d ", m.data.length);
printf("]");
}
</code>
-manfred
Jan 25 2005
Manfred Nowak wrote:// executable segfaults if line 43 is uncommented // gdc (GCC) 3.4.4 20050121 (prerelease) under cygwin // flawless run when compiled from dmd.0.111.win32I have not compared stage2 and stage3 of the compiler built. So it is possible that the compiler is broken.The code works fine (with m.empty();) on Linux and Darwin, except that it doesn't print anything on Mac OS X since you left out the \n at the end. Did you try changing the venerable bit[] into wbit[] instead ? (that is: byte[]) --anders
Jan 26 2005
Manfred Nowak wrote:
I have not compared stage2 and stage3 of the compiler built. So it is
possible that the compiler is broken.
<code>
// executable segfaults if line 43 is uncommented
// gdc (GCC) 3.4.4 20050121 (prerelease) under cygwin
// flawless run when compiled from dmd.0.111.win32
module set;
class Set( Base, Value=bit){
Value[ Base] data;
int opApply(int delegate(inout Base b, inout Value v) dg){
printf("[opApply ");
int result = 0;
for (int i = 0; i < data.length; i++) {
result = dg(i, data[i]);
if( result) break;
}
printf("]");
return result;
}
void empty(){
foreach( Base b, Value v; data){
delete data[ b];
}
}
void include( Base b){
data[ b]= data[ b];
}
}
void main(){
printf("[main ");
alias char[] String;
alias Set!( int) InstSet;
InstSet m= new InstSet;
m.include( 1);
printf("%d ", m.data.length);
//m.empty();
printf("%d ", m.data.length);
printf("]");
}
</code>
-manfred
I'm not getting the problem on Cygwin or Darwin, but I haven't tried
3.4.4 yet. I don't think deleting from AAs in a foreach is supported in
general, but this example shouldn't crash.
An easier way to clear an AA to simply assign 'null' to it.
David
Jan 27 2005
Manfred Nowak wrote:
int opApply(int delegate(inout Base b, inout Value v) dg){
printf("[opApply ");
int result = 0;
for (int i = 0; i < data.length; i++) {
result = dg(i, data[i]);
if( result) break;
}
printf("]");
return result;
}
This is wrong. Instead it should be used:
<code>
int opApply(int delegate(inout Base b, inout Value v) dg){
fprintf( stderr, "[opApply ");
int result = 0;
Base[] keys= data.keys;
for (int i = 0; i < keys.length; i++) {
fprintf( stderr, "+");
result = dg(keys[i], data[keys[i]]);
if( result) break;
}
fprintf( stderr, "]");
return result;
}
</code>
But the crash persists. According to gdb the reference to the delegate
in the third parameter of phobos.internal.(aaA.d)._aaApply2 is wrong.
I'll try to revert to an older snapshot of gcc.
-manfred
Jan 30 2005
Manfred Nowak wrote:I'll try to revert to an older snapshot of gcc.Reverted to the version that currently is distributed with cygwin, i.e. gcc-3.3.4 with a D-version that does not understand some features. Problem remains...giving up. -manfred
Jan 30 2005









=?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb algonet.se> 