Oh! You have a toooo complicated way to report bug. 
 
Ok, += operator works only one time in my program later this act as simple = 
I'll send you my saved gdb session. I saved the full session, but only last 
5-10 lines are important. If you will have a trouble with undersanding fill 
free to leave message to [EMAIL PROTECTED] or [EMAIL PROTECTED] If you need my 
full program - let me know - I'll save it for you.  
 
Thank you for my Freedom, 
Dmytro 
 
start gdb session------------------------------- 
Starting 
program: /home/project/communa/agitator/agitator ./test.agr ./test.nasm 
j1 
j2 
j3 
3 
----------------------- 
dvar 
dima 
barra 
julia 
kostik 
5 
----------------------- 
 
Breakpoint 1, oper (sch=59 ';') at agitator.c:80 
80              if(retword(buf)) { // LEFT OPERAND `if' structure 
(gdb) n 
84                      var = -1; 
(gdb) 
85                      for(c = 0; c < locsub; c++) { 
(gdb) 
86                              if(iseq(buf, locs[c].name)) { 
(gdb) 
85                      for(c = 0; c < locsub; c++) { 
(gdb) 
86                              if(iseq(buf, locs[c].name)) { 
(gdb) 
85                      for(c = 0; c < locsub; c++) { 
(gdb) 
86                              if(iseq(buf, locs[c].name)) { 
(gdb) 
85                      for(c = 0; c < locsub; c++) { 
(gdb) 
86                              if(iseq(buf, locs[c].name)) { 
(gdb) 
85                      for(c = 0; c < locsub; c++) { 
(gdb) 
92                      if(var == -1) { // is our var not in `locs', then look 
at `vars' 
(gdb) 
93                              for(c = 0; c < varsub; c++) { 
(gdb) 
94                                      if(iseq(buf, vars[c].name)) { 
(gdb) 
93                              for(c = 0; c < varsub; c++) { 
(gdb) 
94                                      if(iseq(buf, vars[c].name)) { 
(gdb) 
93                              for(c = 0; c < varsub; c++) { 
(gdb) 
94                                      if(iseq(buf, vars[c].name)) { 
(gdb) 
95                                              var = c; 
(gdb) 
96                                              loc = 0; 
(gdb) 
97                                              break; 
(gdb) 
102                     if(var == -1) { // not found 
(gdb) 
109                     loper = find_free_ovar(); 
(gdb) 
110                     if(loc) { 
(gdb) 
116                             setptr = &(vars[var]); // this is for set 
member resolvation 
(gdb) 
117                             ovars[loper].size = 
types[vars[var].type].size; 
(gdb) 
118                             ovars[loper].pos = vars[var].pos; 
(gdb) 
119                             ovars[loper].AStype = AS_DATA; 
(gdb) 
124                             if(retchar() == '.') { 
(gdb) 
125                                     if(!retword(buf)) { 
(gdb) 
131                                     loc = 1; // I reuse loc here as a 
found flag 
(gdb) 
132                                     for(c = 0; c < 
types[setptr->type].varsub; c++) { 
(gdb) 
133                                             
if(iseq(types[setptr->type].vars[c].name, buf)) { 
(gdb) 
134                                                     ovars[loper].pos += 
types[setptr->type].vars[c].pos; 
(gdb) p ovars[loper].pos 
$11 = 3 
(gdb) p types[setptr->type].vars[c].pos 
$12 = 0 
(gdb) p ovars[loper].pos + types[setptr->type].vars[c].pos 
$13 = 3 
(gdb) n 
135                                                     ovars[loper].size = 
types[types[setptr->type].vars[c].type].size; 
(gdb) p ovars[loper].pos 
$14 = 3 
(gdb) n 
136                                                     setptr = 
&(types[setptr->type].vars[c]); // this is for set member resolvation 
(gdb) 
137                                                     loc = 0; 
(gdb) 
132                                     for(c = 0; c < 
types[setptr->type].varsub; c++) { 
(gdb) 
133                                             
if(iseq(types[setptr->type].vars[c].name, buf)) { 
(gdb) 
132                                     for(c = 0; c < 
types[setptr->type].varsub; c++) { 
(gdb) 
133                                             
if(iseq(types[setptr->type].vars[c].name, buf)) { 
(gdb) 
132                                     for(c = 0; c < 
types[setptr->type].varsub; c++) { 
(gdb) 
140                                     if(loc) { 
(gdb) 
124                             if(retchar() == '.') { 
(gdb) 
125                                     if(!retword(buf)) { 
(gdb) 
131                                     loc = 1; // I reuse loc here as a 
found flag 
(gdb) 
132                                     for(c = 0; c < 
types[setptr->type].varsub; c++) { 
(gdb) 
133                                             
if(iseq(types[setptr->type].vars[c].name, buf)) { 
(gdb) 
134                                                     ovars[loper].pos += 
types[setptr->type].vars[c].pos; 
(gdb) p ovars[loper].pos 
$15 = 3 
(gdb) p ovars[loper].pos + types[setptr->type].vars[c].pos 
$16 = 3 
(gdb) p types[setptr->type].vars[c].pos 
$17 = 0 
(gdb) n 
135                                                     ovars[loper].size = 
types[types[setptr->type].vars[c].type].size; 
(gdb) p ovars[loper].pos 
$18 = 0 
(gdb) q 
The program is running.  Exit anyway? (y or n) y

-- 
           Summary: += operator does now work as expected, I have gdb
                    session saved
           Product: gcc
           Version: 3.3.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: communa at ua dot fm
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23493

Reply via email to