Release coccinelle-0.2.4rc5
[bpt/coccinelle.git] / changes.txt
index bbc8c07..1246320 100644 (file)
 -*- org -*-
 
+* upcoming/planned/todo
+** Language:
+- Semantic patch for other languages
+- Support metavariables, virtual rules and virtual identifiers
+  in initialize and finalize rules
+
+** Features:
+- New scripting languages
+
+** Bugfix:
+- Add more information in documentation, man pages and wiki
+
+
+* 0.2.4
+** Language:
+- scripts now have names and can declare metavariables that are seen by
+  SmPL as identifier metavariables, see demos/{python,ocaml}tococci.cocci
+- declaration (match variable declarations) and field (match structure
+  field declarations) metavariables
+- matching of array initializations and of enum declarations
+
+** Features:
+- compatability with Python 2.7.  Thanks to Richard W.M. Jones for pointing
+  out the problem
+- python and ocaml string representations of parameter lists and expression
+  lists
+- try simpler patterns on glimpse failure
+- graceful and immediate failure when a virtual rule is defined on the
+  command line, but not in the rule
+- spatch returns -1 when a virtual rule is requested that is not supported
+- no transformation when using * with the option -no_show_diff
+- expanded +++ file name for match output
+- struct *^* and enum *^* metavariable types
+- allow an assignment to match a variable initialization, even if multiple
+  variables are declared at the same time.
+
+** Bugfix:
+- detect used after metavariables in simple statement metavariable match
+- allow inheriting position variables over rules that make transformations
+  but depend on virtual rules that are not defined on the command line
+- treat top-level tokens in decl visitor.  Thanks to Peter Tummeltshammer
+  for noticing a resulting problem.
+- improve typing of the result of an assignment expression
+- eliminate some recursive calls in C code parsing to avoid stack overflows
+- better pretty printing of #define when the whole line is removed
+- better pretty printing of asm code containing
+  "::[input]"r"(&coherence_data[i])"
+- allow pretty printing of C code with nameless bit fields
+- avoid adding an error message to standard output if ocamlfind is not
+  found
+- struct/union/enum-typed metavariables with a metavariable type name
+- better management of whitespace between deleted lines.  Thanks to
+  Andriy Gapon for noticing the problem.
+- improved parsing recovery for badly parsed struct/enum typedefs
+- drop expanded tokens in sgrep output.  Thanks to Andriy Gapon for
+  noticing the problem.
+- constant strings have array type, not pointer type.  Thanks to Vasiliy
+  Kulikov for noticing the problem.
+
+* 0.2.3
+** Language:
+- <= constraints relating an expression metavariable to one or more
+  inherited expression metavariables that it should be a subexpression of
+- the -inplace and -outplace options have been renamed -in_place and
+  -out_place.  -in_place no longer makes a backup.  A backup can be
+  requested using the option -backup_suffix, eg -backup_suffix .bk
+- identifiers can be constrained to be different from an inherited
+  identifier metavariable, or from a set containing both concrete
+  identifiers and inherited identifier metavariables.
+- support for ocaml scripting
+- ast available in ocaml scripts
+
+** Features:
+- drop inconsistent paths check when only one node was matched
+- allow #define id with no definition
+- attempt to add newlines in the generated code when function calls in the
+  smpl cause passing column 80
+- allow - in front of statement level nests, if everything inside the nest
+  is also -
+- 'configure' looks for some system libraries: menhirLib, sexplib, pycaml.
+  Not available libraries are replaced by a copy provided with the sources.
+- added static for a function goes just before what is specified in the
+  semantic patch, not before any comments etc.
+- Add a new option, -ignore_unknown_options, to ease the integration
+  of Coccinelle as a checker in a toolchain.
+- error in python code causes immediate abort of spatch
+- use the same algorithm for collecting grep tokens as for collecting
+  glimpse tokens
+- Add scripts/spatch.bash_completion for automatic completion of common
+  options under the bash shell.
+- Print rule name when a script rule crashes
+- Allow the declaration of an expression list or parameter list
+  metavariable to specify the number of expressions or parameters,
+  respectively.
+
+** Bugfix:
+- drop inconsistent paths check when only one node was matched
+- better take into account virtual rules when selecting glimpse tokens
+- print diff when only a comment is added
+- the type of the C code !x should be int regardless of the type of x
+- allow python code at the beginning of an included file
+- better adjustment of whitespace when deleting adjacent lines.  Thanks to
+  Wolfram Sang for pointing out the problem.
+- allow metavariables to be inherited from included files
+- allow ? on goto
+- more graceful failure on finding a strange character in a macro parameter
+  list
+- support Parameter metavariables
+- add space after the last comma in an added portion of an argument list
+- SmPL nameless struct should only match a nameless struct, not a nameless
+  union.  Thanks to Peter Tummeltshammer for pointing out the problem.
+- adjustments to storage don't modify inline as well
+- matching and transformation allowed on inline
+- allow removed field between two ... in structure initialization
+- allow removing an entire structure initialization
+- manage labels within do while 0 macros
+- added space after : in printing a conditional expression.  Thanks to Josh
+  Triplett for noticing the problem.
+- dropped trailing whitespace when code at the end of a line is deleted.
+  Thanks to Josh Triplett for noticing the problem.
+- Fixed environment management when script rule uses cache.  Thanks to
+  Bissyande for finding the problem.
+- when false matches if with no else
+- ensure { ... } with whencode checks to the end of the function.  Thanks to
+  Rene Rydhof Hansen for finding the problem.
+
+* 0.2.2
+** Language:
+- Added ToTestExpression to iso language, see standard.iso for an
+  explanation
+- Added depends on to initialize and finalize script code
+
+** Features:
+- Update Emacs mode (cocci.el) to support 'virtual' rules and fix other
+  keywords sush as 'depends on', 'using', 'disable'
+- better treatment of != 0 in isos, communtativity for ==/!= for all
+  constants
+- allow adding // comments and blank lines (even after cocci + code)
+- Add support for multiple -I options
+
+** Bugfix:
+- correct interaction between virtual rules and included .cocci files
+- improvement in treatment of ! in isos, to avoid duplicating + code
+- improvement in treatment of metavars as isos, to avoid duplicating + code
+  between toplevel and variable instantiation
+- test expression of smpl conditional, etc no longer assumed to have type
+  int
+- correct + line numbers in the patch produced when using *
+- iso constant metavariable matches an identifier whose name is all capital
+  letters, eg NULL
+- allow / at the end of the name of a directory (-dir) or patch prefix
+  (-patch)
+- dropped space in + code after the binding of a type metavariable that is
+  a pointer type
+- better handling of . or .. in -dir name
+- allow keywords and metavariable names in identifier constraints (not sure
+  keywords is very useful, though)
+- no lubtype on arguments of && and || in SmPL
+- allow unknown as type for array indices in SmPL
+- support matching of static annotation on functions that are both static
+  and inline
+- support ENOTDIR error in Common.lfile_exists, to allow for the case where
+  an include file is in a subdirectory that exists but is an ordinary file,
+  not a directory.
+- better management of unbound position variables that appear in
+  constraints
+- cause python parser to skip over // comments, hoping that // is not
+  meaningful inside python
+- require + on every line of a multiline comment
+- correct calculation of line numbers when there is script code
+- always annotate arguments of && || and ! as test expressions in C code.
+
+* 0.2.1
+** Language:
+- Add virtual identifiers
+- Add coccilib.report and coccilib.trac Python modules
+- coccilib.org and coccilib.report are imported by default but not loaded
+  in the current scope.
+
+** Features:
+- Parse_error_msg now more helpful.  New option -verbose_parsing for even
+  more information.
+- Improve Python import handling. They are imported once during script
+  initialization.
+
+** Bugfix:
+- correct treatment of depends on with || for virtual rules
+
+* 0.2.0
+** Language:
+
+** Features:
+- Remove duplicated code in disjunctions
+- Better error message when grep finds nothing relevant.  Thanks to Joe
+  Perches for the suggestion.
+- added -keep_comments option for the unparsing of the transformed code
+- Option "-version" now also gives information about built-in
+  Python binding support.
+- slightly faster environment manipulation in pathological cases
+- hack added to accept well-formed #define after function header
+
+** Bugfix:
+- Proper consideration of #define macro arguments in checking for the use
+  of metavariables and in computing the line numbers of complex terms
+- Better parsing of included .cocci files
+- Put included .cocci files in the right order
+- Bind position variables only once for #include
+- Fix bug in include_match that caused everything to halt when all matches
+  were discarded
+- Merge unlikely/likely iso rules under a iso rule named unlikely
+- Some fixes to coccicheck rules, thanks to Andrew Lunn
+- Support groups in regular expression, thanks to Michael Stefaniuc
+
+* 0.1.11
+
+** Language:
+- Meta-identifier/function and constant could be filtered from SmPL by
+  regular expressions using the "~=" and "!~=" operators followed by
+  an OCaml regular expression (see man Str) in double quote.
+- Virtual rules, which can be referenced in depends, and set and unset
+  using the command-line options -D
+- ++ for multiple additions
+
+** Features:
+- coccicheck: a framework to check a series of SmPL files on a project
+  see scripts/coccicheck for more information
+
+** Bugfix:
+- bind position variables to the correct starting position in the case of a
+  complex statement such as an if or while.  Thanks to Derek Jones for
+  pointing out the problem.
+- checking for non mentioned case lines in switch should be unchecked.
+- space should be printed after sizeof when there are no parentheses around
+  the argument.  Thanks to Daniel Walker for pointing out the problem.
+- avoid introducing sharing in propagating ! over () in treatment of isos
+- save_excursion has to handle and rethrow exceptions
+- eliminate unnecessary consideration of CVS strings.  Thanks to David
+  Young for pointing out the problem.
+- completely new treatment of statement metavariables
+- better type checking for macro definitions
+- drop regression testing in -parse_c
+
+* 0.1.10
+
+** Language:
+- declarations allowed in switch, suggested by Derek M. Jones
+
+** Features:
+- use interval timer for timeouts.  Thanks to Derek M. Jones for the
+  implementation.
+- more flexible env.sh, thanks to Derek Jones.
+- faster Python invocation
+- simplify unparsing in the sgrep case
+
+** Bugfix:
+- for glimpse there is no point to create a pattern containing a numeric
+  constant because glimpse doesn't index them
+- add spaces after commas in function calls and function headers
+- made python integration more like the ubuntu version
+  http://patches.ubuntu.com/by-release/extracted/debian/c/coccinelle/0.1.5dbs-2/01-system-pycaml
+  this fixes some memory management problems with None, True, and False
+- correct labels associated with a switch in the CFG so that a statement
+  metavariable can match a switch.  Thanks to Derek Jones for pointing out
+  the problem.
+- keep switch pattern within switch body.  Thanks to Derek Jones for
+  pointing out the problem.
+- Allow expanded tokens to be stored in metavariables, as long as they are
+  not removed.  But this does currently allow them in + code, which will
+  produce the expansion.  Thanks to Ali-Erdem Ozcan for pointing out the
+  problem.
+- improved adjustment of spacing when code removed at the beginning of a line
+
+* 0.1.9
+
+** Language:
+- allow fresh identifiers to be declared using ## such that the value mixes
+  both strings and previously declared metavariables
+
+** Features:
+- better handling of expanded code containing ##. Now compute the 
+  result.
+- more precise warning message for the "'\' outside define".
+  Thanks to Nicholas Mc Guire for pointing out the problem.
+- more precise warning message related to ifdefization.
+  Thanks to Derek Jones for pointing out the problem.
+- we don't create any more certain files in /tmp (they may be a cause
+  of security problems).
+  Thanks to Eugeniy Meshcheryakov for pointing out the problem.
+- More optimization for the case of just deleting a complete function.
+  Allows this to happen without tracing through all the control-flow
+  paths.  Thanks to Francois Bissyande for pointing out the problem.
+- prevent code from being added to the beginning or end of a disjunction
+- more information about why a script is not applied when using -debug option
+- added -no_safe_expressions option
+- added -no_loops option.  Ignores back edges derived from looping
+  constructs.  This is unsafe, but perhaps useful for bug finding, as it can
+  be more efficient.
+- for semantic matches, allow "minus" on same code with multiple
+  environments
+- better error message for mismatch of parenthesis in column 0 with normal
+  parenthesis.  Thanks to Derek Jones for pointing out the problem.
+- allow disjunctions on function return types.  Thanks to Pierre Habouzit
+  for pointing this out.
+
+** Bugfix:
+- keep disjunction in the proper order for structure initialization fields
+- variables declared in different places should not seem to match each
+  other
+- drop complaints about label metavariables not being used
+- drop test information from the type of an expression when the expression
+  is bound to a metavariable
+- nests should not extend beyond the before and after code, even if the
+  before and after code matches the nest code
+- nests should extend into conditionals that end in error exit
+- take into account metavariables on "else".  Thanks to Derek Jones for
+  pointing out the problem.
+- print single quotes on generated character constants
+- better typedef handling in the initialisation/affectation builtin
+  isomorphism, cf -test init_affect_typedef
+- support disjunction of types on variable declaration
+- allow @ within strings in script code.  ignore // comment lines in script
+  code.
+- don't drop + code placed after the transformed code
+- drop spaces produced by removing code before semicolons
+- adjusted spacing within generated code
+- less verbose -sp.  Thanks to Derek Jones for pointing out the problem.
+- accept multiple type names in a SmPL typedef declaration.
+
+* 0.1.8
+
+** Language:
+
+** Features:
+- Metavariables now capture the cpp code contained within their definitions
+- When - fragments are separated by ... or nest boundaries in the semantic
+  patch, but end up matching adjacent source code, the comments, cpp code
+  and whitespace that are between them are not deleted.
+- better parsing of C: do expansion of macros only when needed when
+  have actually a parse error and also leverage the definition of macros
+  in the parsed file (or in a optional_standard.h file passed as a parameter).
+  This should reduce the need for many hardcoded definitions in standard.h
+- new semantics for the -macro_file option, by default now expand macros
+  only when necessary. To force use the -macro_file_builtins option instead.
+- a new -extract_macros command line action to help the parser. Works with
+  the -macro_file option. e.g. 
+    $ ./spatch -extract_macros ~/linux > /tmp/alldefs.h
+    $ ./spatch -macro_file /tmp/alldefs.h -sp_file foo.cocci -dir ~/linux
+- removed -D macro_file option, not consistent with what -D usually means
+- reattempt to be more efficient for statement metavariables that are just
+  placeholders (ie, no modification, no reuse)
+- triples now returned from ctl in sorted order.  The main key is the
+  state.  On the other hand, the state order does not always agree with the
+  order of appearance in the code.
+- spatch is now less verbose on the things it does yet handle. Less confusing
+  for new users.
+- slightly better error report. Thanks to Derek Jones for the suggestion.
+- added the options -linux_spacing and -smpl_spacing.  -linux_spacing
+  causes spatch to follow the spacing conventions of Linux, while
+  -smpl_spacing causes spatch to follow the spacing in the semantic patch.
+  -linux_spacing is the default.
+- more informative error reporting for the already tagged token case.
+  Thanks to Erik Hovland for the suggestion.
+
+** Bugfix:
+- better parsing of declare macro at toplevel and in structure. 
+  cf -text xfield
+- allowing back typedef names for fieldname
+- better printing of else in generated code
+- slightly better type inference for binary operators.
+- clear out declarer names and iterator names between SmPL files (for
+  -testall)
+- better parsing and type checking of macro type aliases. Cf -test macro_int16.
+  Thanks to Li Yingtong for pointing out the problem.
+- make insert_virtual_positions tail rec, avoid stack overflow pb.
+  Thanks to Diego Liziero <diegoliz@gmail.com> for pointing out the
+  problem.
+- Better type inference for arithmetic binary operators
+  Thanks to Li Yingtong for pointing out the problem.
+- Better type inference for constants
+  Thanks to Li Yingtong for pointing out the problem.
+- move computing of adjacency information for semantic patches to after
+  application of isomorphisms, because isomorphisms can introduce "..."
+- compute adjacency information for negated ...
+- record with each transformation site the set of indices of the witness
+  trees that caused the transformation site to come about.  Whitespace and
+  comments between remove tokens associated with disjoint witness trees is
+  not removed.
+- correct treatment of function pointer typed parameters in the SmPL ast0
+  visitor.
+- better parsing error message and error recovery when comments are not ended, 
+  when some macros have a weird body, and when some switch have a weird
+  Body. 
+  Thanks to Derek Jones for pointing out the problem.
+- better detection and passing of "dangerous" ifdefs, cf -test
+  double_switch.
+- dropped the separation of decls and body in Seq.  This gives better
+  positioning of the bindings of metavariables shared between them.
+  Thanks to Erik Hovland for an example that shows the problem.
+
+** Internals:
+- supress warning in compiling ocamlsexp (warning caused by a new behavior
+  of cpp used internally in processing files in ocamlsexp/)
+
+* 0.1.7
+
+** Language: 
+- initialize and finalize script code, cf demos/initial_final.cocci
+
+** Features:
+- -iso_limit option to limit the depth of isomorphism application
+- with the dir option, the include path is implicitly set to the "include"
+  subdirectory of the specified directory, if the option -I is not used.
+- give a seed for the name of a fresh identifier
+- better handling of cpp "constructed" identifiers as in a##b, that in
+  the futur will make it easier to match over those idents. 
+  cf tests/pb_parsing_macro.c. Thanks to Ali-Erdem Ozcan for pointing
+  out the problem. A new "parsing hack hint" is also available:
+  YACFE_IDENT_BUILDER, cf standard.h.
+
+** Bugfix:
+- drop excessive "optimization" in ctl generation for while and for loops
+- allow . as the name of the directory
+- for type inference for an assignment, take the type of the right-hand
+  side expression, not the type of the assigned variable
+- allow for with a declartion in the first header element, as in C++
+  (partial support)
+- allow for matching against variable declarations that include only
+  storage, eg static, but no type at all.
+- allow for matching against types that contain both short/long and int
+- allow the type metavariable in the SmPL code "unsigned T" to match a T
+  that is a type consisting of more than one word, eg long int.
+- -ifdef_to_if option made to process nested ifdefs
+  (partial support)
+
+** Internals: 
+- improve and fix installation process (usable on BSD)
+- improve and fix testing process
+- apply patches from Eugeniy Meshcheryakov
+- reorganize the way we parse C identifiers, especially concatenated cpp 
+  identifiers as in a##b. This may lead to some regressions as we may
+  not parse as much code as before.
+- removed popl/ and popl09/ and popl related stuff from official distrib.
+
+* 0.1.6
+
+** Language:
+- the ability to add comments
+
+** Features: 
+- grouping of generated rules with -hrule option
+- handling of special coccinelle comments 
+  /* {{coccinelle:skip_start}} */ and
+  /* {{coccinelle:skip_end}} */
+  allowing to give more hints to the C parser.
+  Thanks to Flavien@lebarbe.net for the idea.
+- the ability to print the values of more (but not all) kinds of
+  metavariables from python
+- new vim SmPL mode.
+  Thanks to Alexander Faroy.
+
+** Bugfix:
+- consider the ident tokens also in the 2 lines before the error line for the 
+  10-most-problematic-parsing-errors diagnostic.
+- SmPL parser allows cast as the argument of a pointer
+- SmPL type checker allows enum as an array index
+- Better generation of fresh metavariables names in hrule
+- no more warnings about things that should be metavariables when there is
+  a disjunction in a function position
+- bugfix in parser, better error message.
+  Thanks to Ali-Erdem OZCAN <ali-erdem.ozcan@st.com> for the bug report.
+
+** Internals: 
+
+* 0.1.5
+
+** Language: 
+- added initialiser metavariable
+- added sequences of designators in structures
+
+** Features: 
+- improved printing of the C code corresponding to metavariables
+- improved printing when code (eg declarations) is removed at the beginning
+  of a block, and then is followed by a blank line
+- slightly less verbose error reporting in parsing_hacks
+
+** Bugfix:
+- fixed some problems with parsing SmPL code where a nest appears after a |
+- better treatment of { }, form in macros wrt unparse_c
+- less quiet for -parse_c
+- improve parsing heuristics regarding macro statement
+
+** Internals: 
+
+* 0.1.4
+
+** Language: 
+- long long added to SmPL
+
+** Documentation:
+- add grammar reference and spatch command line options reference
+
+** Features: 
+- can match patterns of the form unsigned T or signed T, where T is a
+  metavariable
+- dropped the sizeof_parens isomorphism, which was made redundant by the
+  paren isomorphism
+- simple rule generation
+
+** Bugfix:
+- trailing , ; and ) no longer left on a line by themselves
+- better treatment of error exit when the searched for code matches the
+  error exit condition.
+- fix incorrect treatment of parentheses in test_exps that could allow +
+  code to be added twice
+- don't ask whether iterator names and declarer names should be declared as
+  metavariables.
+- slightly better support for expression list metavariables.
+- short and long allowed for array index types in SmPL
+- more restrictions on type inference for pointer arithmetic in SmPL
+- allow isomorphisms to apply when + code is anywhere within all - terms
+- changed order of printing const and volatile
+- allow  eg ... <... in plus code
+- better formatting of generated if/while/etc. code
+- better parse error reporting when the problem is at the end of the file
+
+** Internals: 
+- isomorphisms don't apply under signed/unsigned, to prevent the creation
+  of things like unsigned signed int.  Need a better solution for this.
+
+* 0.1.3
+
+** Features: 
+- help in building the configuration macro file. The -parse_c action
+  now returns the 10 most frequent parsing errors. This give useful
+  hints to extend standard.h.
+
+** Bugfix:
+- positions no longer allowed on \(, \|, and \)
+- improved propagation of negation for isos in the presence of parens
+- convert Todos in flow graph construction to recoverable errors
+- fixed bug in treatment of when != true and when != false, to allow more
+  than one of them per ...
+- improve parsing of typedef of function pointer. 
+- improve typing.
+- parsing and typing support for old style C function declaration.
+- consider position variables as modifications when optimizing the
+  translation into CTL of function definitions
+
+** Internals: 
+
+* 0.1.2
+
+** Bugfix:
+- better handling of ifdef on statements in control flow graph.
+- transform files even if they do not end in .c (thanks to Vegard Nossum)
+
+** Internals: 
+- merge code of yacfe
+
+* 0.1.1
+
+** Language: 
+ - support for initializer at toplevel, cf -test substruct
+
 * 0.1
 
 ** first public release of the source code:
 
-** Features
+** Language: 
  - embeded python scripting
  - position
 
+** Features
+
 * beta 
 
 ** first public release of the binary