major changes between 5.00.1 and 6.00.0

  • Added static library, including source code, for basic handling of resizable dialogs. Used by the IDE, and possibly you.
  • Using the assert macro in GUI programs should work better now (will use a message box).
  • Added C runtime functions _strndup, _wcsndup, _mm_malloc and _mm_free, and exprimental version of most functions from ISO TR24731-2 ("safer C, part II").
  • The C runtime functions tmpnam and wtmpnam will now use the (single) path from the TEMP environment variable, if present. Increased the value for L_tmpnam.
  • Added more C runtime functions to crtce.lib - _strdup, _wcsdup, _strndup, _wcsndup, _strlwr, _wcslwr, _strupr, _wcsupr, _strrev, _wcsrev, wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset.
  • Added oldnamesce.lib and moved some names there from crtce.lib.

  • Added options /fd, /fp, and /fs to specify the database location for system definitions, known function prototypes, and snippets, respectively.
  • Added support for specifying directories for intermediate and result files when creating a new project.
  • Added support for message scripts in projects (tricky, since part of the output from the message compiler are source files that should also be part of the project - catch-22, or something).
  • Added support for exporting individual resources to file.
  • Changed to resizable dialogs in many places (where it made sense).
  • Revised the build engine for workspaces (the old version could get the silly idea of rebuilding the same project more than once, for example).
  • Added support for enumerations and Thread Local Storage in the debugger.
  • Added better recognition of Unicode entry-points in the debugger (wmain, wWinMain, and so on).
  • Added support for 'match whole word' in Find and Find-in-files.
  • Added support for predefined snippet variables $(FileName), $(ShortDate), $(LongDate), and $(Time).
  • Added support for custom sizes in icons and cursors.
  • Added keyword help for resource scripts and message scripts.
  • Added support for loading and saving dialog control creation data in the GUI resource editor (no editing).
  • Added possibility to upgrade a 32-bit project to 64 bits (64-bit version only).
  • Added 'folding regions' for assembly source files using a special comment syntax (to avoid introducing new incompatible keywords).
  • File dialogs on Windows Vista will now use the new COM interface (IFileOpenDialog and IFileSaveDialog).
  • Added a number of unspecified fixes and improvements.

  • Added new global optimizer.
  • Added new register allocator.
  • Added new function inliner, and option /Ob to control the expansion model.
  • Added support for Thread Local Storage, using __declspec(thread) - Windows Vista removed some of the previous limitations, making it somewhat useful now.
  • Added option /GA, for optimized Thread Local Storage access.
  • Added support for enumerations and Thread Local Storage in CodeView debugging information.
  • Added support for checking arguments to a variadic function using the literal format string (printf, scanf, or scanf_s syntax).
  • Added support for writing make dependencies to the screen using new /M option.
  • Added enumeration coverage check, in switch statement without a default case.
  • Revised support for variable-length arrays - VLAs in blocks, typedefs and so on (the support should now be complete).
  • Added support for binary integer constant extension, using the 0b or 0B prefix.
  • Revised and fixed handling of digraphs.
  • Added predefined preprocessor symbol __COUNTER__.
  • Added intrinsic form of wmemset and wmemcpy C runtime functions.
  • Added some new, and revised several old, warnings.
  • Added support for non-constant and long long bit-field initializers.
  • Revised parsing of C99 idempotent type qualifiers.
  • Increased internal limit to handle some really complex preprocessor expressions (found by a preprocessor stress-test).
  • Bugfix: alignment requirements beyond the default section alignment will now also increase the section alignment.
  • Bugfix: designated initializer for bit-fields didn't work.
  • Bugfix: empty argument for function-like macro invocation wasn't handled (as per C99).
  • Bugfix: no evaluation of #elif expression if condition was already satisfied.
  • Bugfix: relaxed directive syntax for group that is skipped as the result of a false condition.
  • Bugfix: handle (unsigned) type conversion for ?: operator in the preprocessor.
  • Bugfix: enforce right-to-left association for ?: operator in the preprocessor.
  • Bugfix: alert escape sequence didn't work in the preprocessor.
  • Bugfix: a macro redefinition error could sometimes be triggered because arguments wasn't 'normalized' before the test.
  • Bugfix: new identifiers built with the token-pasting (##) operator wasn't re-evaluated correctly.
  • Bugfix: pack(1) on bit-fields didn't work when not all bits were specified for the type.
  • Bugfix: maximum optimizations (/Ox) for X86/X64 enabled the use of conditional move (CMOV) instructions, which won't accept an invalid address in any argument - even if the condition never actually selected that argument. Bummer.
  • Bugfix: the ARM code generator didn't handle special floating-point values NaN and Infinity very well.
  • Bugfix: the X64 code generator will now correctly handle unordered compares (NaN) in precise floating-point mode.
  • Bugfix: the ARM code generator could use the wrong register(s) when passing a structure by value, and the structure was partially or completely held in registers.
  • Bugfix: the ARM code generator was confused when the LR register was only used as a temporary.
  • Bugfix: #pragma warn(disable:n) and #pragma warn(enable:n) should now work (more reliably) for preprocessor warnings.
  • Bugfix: a 'wild' jump (goto, continue, ...) out of a __try - __except block was often lost (X64).
  • Bugfix: overflow check for complex constant expression didn't work.

Macro assembler:
  • Added support for writing make dependencies to the screen using new /M option.
  • Added a few minor fixes and improvements.
  • RC2: Fixed assembler problem with VARARG arguments and fastcall registers (X64).

  • Added support for Thread Local Storage.
  • Added /MANIFESTUAC option.
  • Revised handling of exports/imports (fastcall and data symbols, mostly).
  • Fixed potential bug with X86/X64/ARM relocations using a start value (never generated by POCC or POASM, but possibly by external translators).

Library manager:
  • Revised handling of NAME and EXPORT statements in module-definition files.
  • Revised handling of exports/imports.
  • Bugfix: Export information from PE32+ executables (X64) didn't work.

Make utility:
  • Added support for !if and !elseif preprocessor directives, with expression evaluator.
  • Revised !include preprocessor directive.
  • Comments on preprocessor lines are now supported.
  • Bugfix: file read errors wasn't always reported (some other error probably was, but anyway).

Binary file dumper:
  • Added option /TLS and support for Thread Local Storage.
  • Revised code to dump Cabinet (CAB) files.

Browse information manager:
  • Databases will now always use UTF-8 encoding to make them smaller on disk.
  • The browse information engine is now multi-threading aware, which should fix some weird errors in the IDE.

Install builder:
  • Added SetAllUsers command, and IfAllUsers statement.

Digital signer:
  • Rewritten; changed from CAPICOM to MSSIGN32. Apparently Microsoft's advice to use CAPICOM was crap. F**k you, f**k you very much.