General:
- 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.
IDE:
- 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.
Compiler:
- 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).
Linker:
- 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.
|