vermaseren / form

The FORM project for symbolic manipulation of very big expressions
GNU General Public License v3.0
1.14k stars 136 forks source link

CompressSize insufficient while the compression is off, when Keep Brackets #154

Closed tueda closed 7 years ago

tueda commented 7 years ago

I'm not sure if it makes sense to have a "CompressSize is insufficient" error in the following program:

Off compress;
I mu1,...,mu16;
L F = g_(1,mu1,...,mu16);
B g_;
.sort;
Keep Brackets;
tracen,1;
.end
FORM 4.1 (Nov 29 2016, v4.1-20131025-272-gb993ca7) 64-bits  Run: Fri Dec  2 23:24:51 2016
    Off compress;
    I mu1,...,mu16;
    L F = g_(1,mu1,...,mu16);
    B g_;
    .sort;

Time =       0.00 sec    Generated terms =          1
               F         Terms in output =          1
                         Bytes used      =        112
    Keep Brackets;
    tracen,1;
    .end

Time =       0.16 sec    Generated terms =     100000
               F       1 Terms left      =     100000
                         Bytes used      =    8800004

Time =       0.32 sec    Generated terms =     200000
               F       1 Terms left      =     200000
                         Bytes used      =   17600008

Time =       0.49 sec    Generated terms =     300000
               F       1 Terms left      =     300000
                         Bytes used      =   26400012
CompressSize of     320000 is insufficient
Program terminating at test.frm Line 7 -->
  0.52 sec out of 0.53 sec

Valgrind output:

==19814== Memcheck, a memory error detector
==19814== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==19814== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==19814== Command: ./vorm test.frm
==19814== 
FORM 4.1 (Nov 29 2016, v4.1-20131025-272-gb993ca7) 64-bits  Run: Fri Dec  2 23:25:22 2016
    Off compress;
    I mu1,...,mu16;
    L F = g_(1,mu1,...,mu16);
    B g_;
    .sort;

Time =       0.12 sec    Generated terms =          1
               F         Terms in output =          1
                         Bytes used      =        112
    Keep Brackets;
    tracen,1;
    .end

Time =       8.11 sec    Generated terms =     100000
               F       1 Terms left      =     100000
                         Bytes used      =    8800004

Time =      16.12 sec    Generated terms =     200000
               F       1 Terms left      =     200000
                         Bytes used      =   17600008

Time =      24.14 sec    Generated terms =     300000
               F       1 Terms left      =     300000
                         Bytes used      =   26400012
==19814== Invalid write of size 4
==19814==    at 0x53B8A9: Deferred (proces.c:4477)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid read of size 4
==19814==    at 0x535A72: InsertTerm (proces.c:2546)
==19814==    by 0x53B93B: Deferred (proces.c:4491)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid read of size 4
==19814==    at 0x535886: InsertTerm (proces.c:2507)
==19814==    by 0x53B93B: Deferred (proces.c:4491)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid read of size 4
==19814==    at 0x535877: InsertTerm (proces.c:2507)
==19814==    by 0x53B93B: Deferred (proces.c:4491)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid read of size 4
==19814==    at 0x53B8C3: Deferred (proces.c:4478)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid write of size 4
==19814==    at 0x53B8EE: Deferred (proces.c:4489)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid read of size 4
==19814==    at 0x535A5A: InsertTerm (proces.c:2545)
==19814==    by 0x53B93B: Deferred (proces.c:4491)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
==19814== Invalid write of size 4
==19814==    at 0x53B94B: Deferred (proces.c:4494)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==    by 0x51C5F9: PreProcessor (pre.c:898)
==19814==    by 0x5840E9: main (startup.c:1597)
==19814==  Address 0x52603a8 is 0 bytes after a block of size 1,280,040 alloc'd
==19814==    at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==19814==    by 0x5AC9F7: Malloc1 (tools.c:2236)
==19814==    by 0x56EE27: AllocSetups (setfile.c:617)
==19814==    by 0x570397: MakeSetupAllocs (setfile.c:1059)
==19814==    by 0x584056: main (startup.c:1576)
==19814== 
CompressSize of     320000 is insufficient
Program terminating at test.frm Line 7 --> 
==19814== Invalid read of size 4
==19814==    at 0x5AEFB1: Crash (tools.c:3573)
==19814==    by 0x5842F3: Terminate (startup.c:1699)
==19814==    by 0x587A3F: GetOneTerm (store.c:1385)
==19814==    by 0x53B9B7: Deferred (proces.c:4499)
==19814==    by 0x536F5E: Generator (proces.c:3039)
==19814==    by 0x4A78D6: TraceNgen (opera.c:1794)
==19814==    by 0x4A62B7: TraceN (opera.c:1429)
==19814==    by 0x4A7A23: Traces (opera.c:1836)
==19814==    by 0x5390C6: Generator (proces.c:3613)
==19814==    by 0x52E8DF: Processor (proces.c:404)
==19814==    by 0x4576BE: DoExecute (execute.c:812)
==19814==    by 0x47EDB6: ExecModule (module.c:274)
==19814==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==19814== 
  25.81 sec out of 25.81 sec
==19814== 
==19814== HEAP SUMMARY:
==19814==     in use at exit: 391,485,712 bytes in 132 blocks
==19814==   total heap usage: 669 allocs, 537 frees, 391,535,919 bytes allocated
==19814== 
==19814== LEAK SUMMARY:
==19814==    definitely lost: 0 bytes in 0 blocks
==19814==    indirectly lost: 0 bytes in 0 blocks
==19814==      possibly lost: 0 bytes in 0 blocks
==19814==    still reachable: 391,485,712 bytes in 132 blocks
==19814==         suppressed: 0 bytes in 0 blocks
==19814== Rerun with --leak-check=full to see details of leaked memory
==19814== 
==19814== For counts of detected and suppressed errors, rerun with: -v
==19814== ERROR SUMMARY: 234 errors from 9 contexts (suppressed: 6 from 6)
tueda commented 7 years ago

Fixed in fe7a26bed5.