General:
- Added mshtml.h, mshtmlc.h, dimm.h, schemadef.h, tmschema.h (thank you, Alex!) and intrin.h to the distribution.
Updated dsadmin.h, commdlg.h.
- Added C language reference to the help file.
IDE:
- Added support for better indenting, converting to 'formatted C code', and inserting spaces, rather than tabs,
in the source editor; Added new page in Options dialog for setting preferences about this.
- Added support for setting additional include and library folders per project.
- Faster loading of large projects when browse information is enabled.
- Added new Import eMbedded Visual C++ project wizard. Several enhancements and bugfixes in
Import MSVC project wizard.
- Added Open containing folder in context menu for MDI document tabs.
- Added context help for C keywords in the source editor.
- Added help sub-menu with some web links.
- The debugger will now use exported symbols for modules without debugging info.
- Added support for custom resource types.
- Added support for message tables - both as resources and as binary files (MSG*.BIN).
- Added more add-in stuff: support for building custom file types, commands can be attached to
more menus, resources can be located, added, deleted and/or updated.
- Several minor enhancements added, and potential bugs fixed.
Compiler:
- Added more C99 support:
- Initializers with automatic storage don't need to be constant.
- Designated initializers are now supported. Works for compound literals
too. Known limitations: bitfields must still have constant initializers.
Examples:
int arr1[] = { 0, 0, 0, 0, 0, 0, 1, 2 };
...is same as this...
int arr1[] = { [7] = 2, [6] = 1 };
this work too...
struct { int a[3], b; } w[] = { [0].a = {1}, [1].a[0] = 2 };
...and this...
enum { member_one, member_two };
const char *nm[] = {
[member_two] = "member two",
[member_one] = "member one",
};
...and this (a bit silly)...
some_function(&(struct { int x; int y; }){ .y = y1, .x = x1 });
- Small structures (sizeof struct is 1, 2, 4 or 8) will be optimized like
in the Microsoft compiler. This will matter if you are calling a function that
returns a structure, since the internal "calling convention" have changed. Calling
a function like GetLargestConsoleWindowSize(), that is declared by Microsoft
to return a (small) structure, will not work with previous versions of Pelles C.
The change will also affect some C runtime functions, like div() and ldiv() - so
make sure you are not mixing old and new versions of object files, C runtime
libraries and so on.
- Expressions will now be reordered, in an attempt to avoid "Floating-point
expression too complex" errors. This will affect some integer expressions too.
- Wide character string literals ("Unicode" strings) will now be pooled too - like
character string literals.
- Added support for #pragma code_page() - used when translating wide character string literals.
- Added #pragma lib "name" as an alias for #pragma comment(lib, "name")
- Added support for special Microsoft preprocessor token pasting /##/.
- Added support for "extended relocations" - it's now possible to have
more than 65,535 relocations for a section.
- The ARM backend now support 64-bit long long integers (previously, long
long was 32 bits).
- Tried even harder to avoid "offset too big" errors from the ARM assembler.
- Intrinsic functions _cpuid, wcslen and wcscpy added.
- The compiler will now accept the keywords _forceinline and __forceinline
- without doing much special.
- Using L#string, to build wide character string literals, should now work like
in other compilers (read Microsoft).
- Added several new optimizations, including faster integer division.
- Unknown __declspec attributes will now only cause a warning in Microsoft mode, not an error.
- Added more checks and restrictions for __fastcall functions. Added support for __LOCAL_SIZE symbol.
- Added warning about line-folding inside single line comment (//).
- Added more warnings about overflow in constant expressions.
- Added support for st and st(n) floating-point register names in the assembler.
Linker:
- Added support for multiple resource files (not unlimited - but close enough).
- Will now use the Windows temporary file directory when building the output files.
- Sections in object files, without specific access flags, will be assigned the default value: data, read-write.
This can only happen with buggy external tools.
Bugs:
- Bugfix: inline functions, that referenced other inline functions or global variables,
could sometimes leave the referenced items hanging around, even though the original
inline function wasn't used.
- Bugfix: some intrinsic functions, like memset(), could trigger "Expression
with no effect removed" warning.
- Bugfix: switching between different optimizing strategies, within the
same source file, didn't work well.
- Bugfix: converting a long long to _Bool should now work correctly.
- Bugfix: signed and unsigned division could sometimes cause an internal error in
best_spillee. The same could happen for __fastcall functions using char variables.
- Bugfix: Triggering an exception will trash some processor registers, possibly
destroying some 'register' variables. The optimizer will now turn off register
allocation for functions containing __try -- _except or
__try -- __finally.
- Bugfix: Declarations immediately after a label is now allowed.
- Bugfix: The ARM backend had problems with some negative constants.
- Bugfix: Fixed a small ARM disassembler bug in PODUMP. Also modified the search strategy for
source code files.
- Bugfix: The timezone values in localtime() and _ftime() was wrong.
The daylight saving time zone flag should now be set correctly.
- Bugfix: Preprocessor concatenations like Do##Str##() should now work.
- Bugfix: Calling a function that returned an unsigned value that required integer promotion, without
using the returned value, generated a bad warning.
- Bugfix: Invalid code like "if (1()) ..." could trigger a compiler exception.
- Bugfix: Assigning a NULL pointer constant to a function pointer generated a bad warning.
- Bugfix: Using the _asm keyword inside a _asm block generated an endless loop.
- Bugfix: Some inline assembler instructions generated errors when accessing C variables.
- Bugfix: The compiler emitted two linefeeds for every displayed warning or error message. Should also be
fixed for the other command line tools.
- Bugfix: Using the very last page in the small-block heap (when it was nearly full) could return a bad
pointer that would eventually result in an exception.
- Bugfix: Using a function prototype without __declspec(dllimport), followed by a prototype with
__declspec(dllimport), generated bad code.
- Bugfix: Fixed several problems in POMAKE regarding empty commands and special attributes (-,+,@).
- Bugfix: Fixed a directive buffer limit in the assembler that, for example, could truncate very long
external identifiers.
- Bugfix: Problem with compiler overwriting one __fastcall function argument, while evaluating
another argument - possibly fixed.
- Bugfix: The IDE had problems with backup files with the same name, but in different directories.
- Bugfix: The dialog editor didn't correctly handle text in custom controls.
- Bugfix: The IDE will now check better about which files can be added to a project.
- Bugfix: Fixed several problems with 'order controls' in the dialog editor.
- Bugfix: Problem selecting drag handles for controls inside groupbox controls (related to 'order controls').
- Bugfix: Problem in project settings, when parsing compiler options with spaces before argument (/I and /Fo).
- Bugfix: Import resource will now check for disallowed duplicate resources.
- Bugfix: An old macro definition in setjmp.h caused a linker error on Pocket PC.
|