2.0 === -- Modularised the tool so that different analysis domains can be added through the medium of Eclipse plug-ins (bug 399). Sadly this means the software must always be used from within Eclipse; it is no longer possible to call Java APIs directly from a normal Java executable. -- Added analysis for kernel handles (KERN-EXEC 0 bugs). This is a major new release and has a few known problems. If these cause difficulties, please use 1.2.1 until they are fixed - or let us know that they're important to you, and we will endeavour to fix them sooner. Current major bugs: -- Occasionally the analysis is unnecessarily thorough. This means that some functions take too long to analyse, and the tool gives up, reporting that there are "too many code paths through the function" (bug 435, bug 445, bug 447). -- The Eclipse output lists uninteresting effects, e.g. when variables go out of scope (bug 448). 1.2.1 ===== -- Improved messages when the build was interrupted (bug 423). -- Improved cancellability of some of the later analysis stages (bug 429). -- Eclipse UI changes: status is now properly reported in the Progress view for background jobs. We no longer show dialogs unless there are analysis errors to report. -- Experimental change: We no longer analyse every single function. Instead we only analyse those which are not called by another function. This is to try to analyse only those functions which are intended to be self- contained. (Bugs 344, 428). -- Keeping track of function return values (bug 397). -- Inference of the value of more integers based on paths taken in switch- case constructs (bug 430) 1.2.0 ===== -- Fixed problem finding GXP files created by recent Symbian toolchains when compiling for plug-in DLLs (e.g. CSYs). (bug 400). -- Major change to variable tracking. This should solve many cases where errors are falsely reported for code like this: if (x == 3) MakeRequest(stat); if (x == 3) SetActive(); But it's also quite a lot slower under some circumstances. (bugs 259, 358, 392) -- If the tool runs out of memory whilst analysing a function, it will still attempt to present results for any function which it did successfully analyse. -- Fixed some problems with requesting functions which leave (bug 407) -- Added knowledge of CMsvSendOperation::Start (bug 407) -- Improving messages when analysis of certain XML files fails (bugs 415, 413) -- Improving messages when the Carbide project appears to be corrupt (bug 412) 1.1.4 ===== -- Fixed warning presented for RFs::NotifyChangeCancel(TRequestStatus&) and similar functions (bug 391) 1.1.3 ===== -- Fixed assorted bugs related to leave handling and to switch-case conditions (bug 371, 355, 343, 300, 356, 280, 354, 318, 307, 353, 279). 1.1.2-2 (r3429, strayscanner-better-leave-handling)) ======= Internal testing build. 1.1.2 (r3427, strayscanner-better-leave-handling) ===== Internal testing build. -- Re-enables stacks for related events. 1.1.1 (r3400, strayscanner-dg) ===== Internal testing build. -- Moves away from a simple list of effects to a more sophisticated structure. 1.1.0 ===== Internal testing build. This build is much slower on a minority of complex projects, as it does a much more thorough analysis of which functions might leave. -- Fixed support for requesting functions which leave (bug 162). -- Took account of the fact that some functions always leave (bug 163). -- Assuming a TRequestStatus* passed in as the TAny* parameter of RThread::Create is a request (bug 282). -- Lots of optimisations, which make things quicker for all but the most complex projects. -- Fixed problems with switch-case statements which had variable declarations within (bug 301). 1.0.21 ====== -- Fixed problem where 'return' and 'goto' statements were executed too often, leading to confused flow of control (bug 364). -- Fixed the fact that __ASSERT_ALWAYS didn't. (Also bug 364). -- Further improved GXP name guessing for the command-line tools. Those Symbian OS 9.5 rules are more complicated and mysterious than I thought. (Bug 340). -- Improved help related to how to analyse problems, and how to spot false-positives (bug 376). -- Added awareness of RDebug::Print[f](..., TRequestStatus*) and User::CancelMiscNotifier(TRequestStatus&) (bug 374). -- Fixed complaint from tool about IMPLIB target types when run within Carbide. (Bug 373) 1.0.20 ====== -- Stopped reporting problems for functions which set a TRequestStatus to KRequestPending and then completed it. This is valid behaviour, though it probably indicates you're making a false assumption elsewhere (or why would you need to set it to KRequestPending?) (bug 329). -- Coping better with spotting correct and incorrect behaviour using TRequestStatuses buried in structs and classes (bug 253). -- Improved cancelability during XML parsing phase (bug 352). -- Allowing the analysis of implementations of Symbian APIs which are known to the tools (bug 287). -- Suppressing MB0013 even in CLI unless -t flag given (partial fix for bug 330). -- Improved wording of some problem reports (bugs 357, 360, 361). -- Reported E32USER-CBase 42 problems more reliably (always?) (bug 243) and improved wording of other problem types related to multiple invocations of active objects. This will still cause some false positives until a couple of other bugs are fixed. -- Added awareness of IsActive(), with some caveats (bug 316). -- Added dynamic help. Press F1 when looking at a problem marker to see the documentation for that type of problem (bug 216). -- Fixed bug with TRAPs inside switch-case statements (bug 362). -- Improved UI so that clicking on a problem marker a second time would not reset the problem detail view (bug 367). -- Removed warnings about files containing no code (bug 368). -- Changed call stacks so they match the silly way the rest of the world does them! (bug 363) 1.0.19 ====== -- Added output of GXP names to command-line tool. -- Added some better error messages to command-line tool (bug 335). -- Fixed problem with command-line tool when MMP name provided (bug 311). -- Added basic HTML mode to command-line output (bug 260). -- Fixed problem for CLI executing bldmake under certain configurations (bug 309). -- Improved progress bar accuracy for projects with many resource files (bug 317). -- Added knowledge of RThread::RendezvousCancel and RThread::LogonCancel which previously caused analysis errors (bug 319). -- Possible fix for a problem with internally-generated constructors (bug 320). -- Fixing problems with IMPLIB target type (bug 333). -- Not abandoning the whole analysis if a problem crops up in a file that is not part of the project (for example is in epoc32\include). (Bug 341). -- Fixed infinite loop when processing some code where variables were assigned to each other (bug 303). 1.0.18 ====== -- Improved "speed-up builds" patch for cl_gccxml.pm given in the documentation (bug 276). -- Made leaves double-clickable in the condition results (bug 277). -- Simplified the display of the "conditions" in the problem detail view greatly (bug 269). -- Presenting conditions in order of source code location (bug 255). -- Detailing build problems with Marco++'s STLport, and improving error recognition (bugs 267 and 266). -- Was more specific about some types of problem, and detected some extra types of error (bugs 245, 247, 249, 252) -- Parallelised parsing of the XML documents (bug 168). -- Allow installation of new licences even when software running (bug 275). -- Fixed a problem where switch-case statements were assumed to have default behaviour in addition to the default clause (bug 308) 1.0.17 ====== -- Increased robustness when there's a problem analysing any given function in an XML file or the XML file overall (bug 272). Also added a new API to IAnalysisResults to return errors which are not specific to any file or function. -- Added -a option to command line to analyse existing archived GXP files (bug 257). -- Fixing a problem encountered when using virtual inheritance (bug 273). -- Fixing a problem when using code which does left or right rotates (bug 274). 1.0.16 ====== -- Fixed bug where this sort of code could lead to infinite recursion: TRequestStatus* a = &stat; TRequestStatus* b = a; a = b; MakeRequest(b); (bug 268). -- Hid analysis error that was reported when calling RBusLogicalChannel::DoControl(...,
) (bug 228). -- Ignoring TRequestStatus*s which are NULL (bug 256). -- Removed some problem types which are no longer specifically reported. Instead those problems will normally appear as MB0010 (bug 251). -- Somewhat experimental work to reduce computation required for analysis of very complex functions (bug 220). If you get problems with this release, consider using the previous. 1.0.15 ====== -- Begun to add more specific problem reports about specific build errors (bug 237). -- Clarified some error messages (bug 236). -- Added further checks to ensure multiple simultaneous analyses don't cause problems (bug 231). -- Moved the CLI tool into a directory within the zip file (bug 226). -- Improved return codes from the CLI tool (bug 238). -- Improved command-line 'getting started' text (bug 230). -- Added these release notes into GUI help (bug 233). -- Added some TechView and @publishedPartner APIs which make requests (bug 224). -- Added knowledge of certain extra APIs (e.g. ICL, Kern::RequestComplete) (bugs 192, 223, 242) -- Removed false-positive problem where some code redundantly called iStatus = KRequestPending before making a request (bug 232). -- Prevented confusion between the TRequestStatuses of multiple active objects referred to in a single synchronous call (bug 244). -- Worked around Carbide bug(?) causing null pointer exception for MMPs where MMP was spelled MMP not mmp (bug 234). -- Nearly all reported problems now list all relevant events (bug 254). 1.0.14 ====== -- Fix for incorrect positioning of Problem Detail View (bug 215). -- Help didn't appear in Carbide.c++ 2.0. It does now (bug 214). -- Improved wording of problems MB0003, MB0023 and MB0022 (bug 210). -- Tool always now builds using the SDK of the selected build configuration (bug 200). -- Fixed spurious warnings from functions where there was a request and a wait on the same target, passed by reference or pointer (bug 219). -- Abandoning analysis of really complex functions which would otherwise take a nearly infinite time to analyse (these are very rare). A message is now generated instead (bug 220). -- Fixed bug where command-line version didn't work unless -q was used (bug 227) 1.0.13 ====== -- Fixing infinite recursion when encountering assignment of variables to themselves (bug 195). -- Fixing segmentation fault from GCCE when trying to dereference a member of a union of member function pointers(!!) (bug 175). -- Fixed the fact that the feature version number didn't appear in the about box, hopefully. (Can't test until I build the feature!) (bug 197) -- Fixed problem where tool would sometimes hang onto file handle to GCCXML (bug 198). -- Fixed problem where tool is sometimes unable to rename an older gccxml_cc1plus.exe to gccxml_cc1plus.orig.exe (bug 185). -- Noticing when a thread exits or panics and not reporting subsequent problems which would have occurred after the thread exited (bug 193). -- Unknown functions which take a TRequestStatus now prompt a note marker to be generated, so the limits of the analysis are more clear (bug 191). -- Suppressed display of MB0013 warnings in the IDE, as they caused confusion. These warnings indicated multiple functions which might have behaved incorrectly due to a single error. Now, just that single error is reported, with no reporting of the additional problematic functions (bug 188). -- Fixed bug where User::RequestComplete wasn't recognised as making a request, in circumstances where the code didn't previously set the TRequestStatus to KRequestPending (bug 206). -- Added notification of two consecutive User::RequestCompletes without an intervening wait (bug 209). -- Presenting the license file location in the UI (bug 201). 1.0.12 ====== -- Recognising that TRequestStatus::operator=(KRequestPending) is making a request (bug 171). -- Workaround Carbide problem doing multiple builds simultaneously (bug 166). -- Adding these release notes to command line build (bug 161). -- Fixing bug where MMPs with TARGETTYPE LIB were not being scanned in the Eclipse UI (bug 167). -- Improving description of the TRequestStatuses. For example, "(Argument 0).iStatus" would now be "(this).iStatus" (bug 187). -- Added UIQ APIs (bug 170). -- Improving help related to STL build problems (bug 165). 1.0.11 ====== -- Increasing checking for two-argument form of User::WaitForRequest. -- Updating documentation 1.0.10 ====== -- Supporting two-argument form of User::WaitForRequest. It should now cause no problems during analysis, though we still don't check its usage as thoroughly as we check for other problems. -- Suppressing problems which appear to be caused by other problems in functions we're calling. Actually, we don't suppress them; we show them as a new problem type and as a warning only. 1.0.9 ===== -- Improved error handling in command-line version. No changes to GUI version. 1.0.8 ===== -- Updated code to work with Carbide 1.3.1 -- Updated documentation to reflect new Java APIs -- Performance improvements and memory saving -- More rigorous checks for the presence of the correct version of GCCXML -- Offers to clean and rebuild if an older version of GCCXML was used for some of the XML generation -- Fixed bug where some virtual function calls were still not recognised. -- Supporting overloaded virtual functions. 1.0.7 ===== -- Added recognition of virtual function calls which leave -- Fixed problem where "suppressproblems" tag would also prevent net effects of function from being identified -- Added support for virtual function calls. -- Added support for recursive functions. -- Documented limitations related to do-while loops and backwards-moving goto statements. -- Problems are no longer shown as warnings if they only occur in certain circumstances. -- Workaround for Carbide bug where it pays too much attention to other people's markers. -- Workaround for non-reentrancy of Carbide builder code -- Rationalised Java APIs in preparation for future support of multiple selection in GUI. 1.0.6 ===== -- Added Carbide build environment to run builds using Carbide's mechanisms. -- Added message box at the end of an analysis to report whether problems were found. -- Removed "Rescan now" action from Carbide as it is redundant -- Moved all commands into a submenu of the pop-up menu