[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[creduce-bugs] creduce stuck in a loop *growing* the file



Hi,

I have this input file:

------------------------------------------------------------
template<typename T, typename U> struct palate<  enum E : T {
            a = 1, b = 2, c = 3, 4 };
------------------------------------------------------------

Running creduce (current HEAD, 2c22d7) on it causes an infinite loop
where creduce actually grows the file on each step by adding one space
in the beginning of the second line.

Also, a creduce-XXXXXX temp directory is created in temp directory for
each of those steps (and never removed).

By the way, creduce doesn't fully respect $TMPDIR; apparently
POSIX::tmpnam() used in pass_clex.pm unconditionally returns a path in
/tmp. I'm running creduce repeatedly from an automatic script with
TMPDIR set to a directory which the script removes, but still getting
my /tmp filled with files named "fileXXXXXX", some of them containing
C code and some containing the line "Error: The counter value exceeded
the number of transformation instances!"...

	Sami


------------------------------------------------------------
$ creduce ./require_property.sh creduce-bug.cpp
===< 25052 >===
running 8 interestingness test(s) in parallel
===< pass_blank :: 0 >===
===< pass_clang_binsrch :: replace-function-def-with-decl >===
===< pass_clang_binsrch :: remove-unused-function >===
===< pass_lines :: 0 >===
(-0.9 %, 113 bytes)
(0.0 %, 112 bytes)
===< pass_lines :: 0 >===
(-0.9 %, 113 bytes)
(0.0 %, 112 bytes)
===< pass_lines :: 0 >===
(-0.9 %, 113 bytes)
(0.0 %, 112 bytes)
===< pass_lines :: 1 >===
(-1.8 %, 114 bytes)
(-0.9 %, 113 bytes)
===< pass_lines :: 1 >===
(-2.7 %, 115 bytes)
(-1.8 %, 114 bytes)
===< pass_lines :: 1 >===
(-3.6 %, 116 bytes)
(-2.7 %, 115 bytes)
===< pass_lines :: 2 >===
(-4.5 %, 117 bytes)
(-3.6 %, 116 bytes)
===< pass_lines :: 2 >===
(-5.4 %, 118 bytes)
(-4.5 %, 117 bytes)
===< pass_lines :: 2 >===
(-6.2 %, 119 bytes)
(-5.4 %, 118 bytes)
===< pass_lines :: 10 >===
(-7.1 %, 120 bytes)
(-6.2 %, 119 bytes)
===< pass_lines :: 10 >===
(-8.0 %, 121 bytes)
(-7.1 %, 120 bytes)
===< pass_lines :: 10 >===
(-8.9 %, 122 bytes)
(-8.0 %, 121 bytes)
===< pass_clang_binsrch :: replace-function-def-with-decl >===
===< pass_clang_binsrch :: remove-unused-function >===
===< pass_lines :: 0 >===
(-8.9 %, 122 bytes)
(-8.0 %, 121 bytes)
===< pass_lines :: 1 >===
(-9.8 %, 123 bytes)
(-8.9 %, 122 bytes)
===< pass_lines :: 2 >===
(-10.7 %, 124 bytes)
(-9.8 %, 123 bytes)
===< pass_lines :: 10 >===
(-11.6 %, 125 bytes)
(-10.7 %, 124 bytes)
===< pass_clang :: remove-unused-function >===
===< pass_balanced :: curly >===
===< pass_balanced :: curly2 >===
===< pass_balanced :: curly3 >===
===< pass_clang :: callexpr-to-value >===
===< pass_clang :: replace-callexpr >===
===< pass_clang :: simplify-callexpr >===
===< pass_clang :: remove-unused-enum-member >===
===< pass_clang :: remove-enum-member-value >===
===< pass_clang :: remove-unused-var >===
===< pass_special :: a >===
===< pass_special :: b >===
===< pass_special :: c >===
===< pass_ternary :: b >===
===< pass_ternary :: c >===
===< pass_balanced :: curly >===
===< pass_balanced :: curly2 >===
===< pass_balanced :: curly3 >===
===< pass_balanced :: parens >===
===< pass_balanced :: angles >===
===< pass_balanced :: curly-only >===
===< pass_balanced :: parens-only >===
===< pass_balanced :: angles-only >===
===< pass_clang :: remove-namespace >===
===< pass_clang :: aggregate-to-scalar >===
===< pass_clang :: local-to-global >===
===< pass_clang :: param-to-global >===
===< pass_clang :: param-to-local >===
===< pass_clang :: remove-nested-function >===
===< pass_clang :: union-to-struct >===
===< pass_clang :: return-void >===
===< pass_clang :: simple-inliner >===
===< pass_clang :: reduce-pointer-level >===
===< pass_clang :: lift-assignment-expr >===
===< pass_clang :: copy-propagation >===
===< pass_clang :: callexpr-to-value >===
===< pass_clang :: replace-callexpr >===
===< pass_clang :: simplify-callexpr >===
===< pass_clang :: remove-unused-function >===
===< pass_clang :: remove-unused-enum-member >===
===< pass_clang :: remove-enum-member-value >===
===< pass_clang :: remove-unused-var >===
===< pass_clang :: simplify-if >===
===< pass_clang :: reduce-array-dim >===
===< pass_clang :: reduce-array-size >===
===< pass_clang :: move-function-body >===
===< pass_clang :: simplify-comma-expr >===
===< pass_clang :: simplify-dependent-typedef >===
===< pass_clang :: replace-simple-typedef >===
===< pass_clang :: replace-dependent-typedef >===
===< pass_clang :: replace-one-level-typedef-type >===
===< pass_clang :: remove-unused-field >===
(-11.6 %, 125 bytes)
(-12.5 %, 126 bytes)
(-13.4 %, 127 bytes)
(-14.3 %, 128 bytes)
(-15.2 %, 129 bytes)
(-16.1 %, 130 bytes)
(-17.0 %, 131 bytes)
(-17.9 %, 132 bytes)
(-18.8 %, 133 bytes)
[... ad infinitum]
^C
$ cat creduce-bug.best
template<typename T, typename U> struct palate<  enum E : T {
                                                                    a = 1, b = 2, c = 3, 4 };
------------------------------------------------------------

	Sami



Attachment: signature.asc
Description: Digital signature