Pelles C Changelog

What's new in Pelles C 9.00

Jun 18, 2019
  • General:
  • All tools are now 64-bit only, except the installer. You can still build for both 32-bit and 64-bit Windows.
  • The Add-In SDK is now part of the main Setup (not a separate Setup).
  • Switched from Microsoft CodeView to Pelles C Debug Info.
  • Added support for new C17 standard (mainly affects the help file).
  • Added new (private) C runtime functions (see the help file).
  • Added support for UTF-16LE and UTF-8 encoded text files in the C runtime.
  • Updated a bunch of Windows include files.
  • IDE:
  • Added support for project modes. Default modes are Release and Debug.
  • Added support to the source code editor for search/replace of text in all project/workspace files.
  • Added better support for clean project and clean workspace.
  • Revised backup file handling in the source code editor.
  • Added composite file to File Differences.
  • Added debugger support for Pelles C Debug Info, dropped support for Microsoft CodeView info.
  • Added debugger support for thread descriptions (the application must provide them).
  • Improved debugger stack walking, especially for X86.
  • Revised layout of debugger register tab.
  • Completely rewritten ZIP file helper library, with f.e. support for UTF-8 encoding.
  • Added slightly better support for installer projects.
  • Added support for reading old PPM images (simply because I needed it).
  • Removed support for WinHelp files.
  • Compiler:
  • Added support for Pelles C Debug Info, dropped support for Microsoft CodeView info.
  • Added option /ARCH for X64, with choice of SSE2, AVX, or AVX2.
  • Added new alias analysis (f.e. the restrict qualifier will have more effect than before).
  • Added support for unrolling trivial loops.
  • Revised support for atomics and implementation of stdatomic.h.
  • Revised support for variable arguments and implementation of stdarg.h.
  • Added support for __has_include() operator in preprocessor.
  • Changed __declspec(noretchk) to __declspec(nodiscard) (fewer functions with important return value than unimportant ones).
  • Added attempt at some basic Spectre mitigations.
  • Added constant folding of many more SIMD intrinsics.
  • Added better reporting of source line for inlined code.
  • Added option /Zd to disable a warning (the option can be used multiple times, for different warnings).
  • Revised spilling in register allocator to make it less likely to die of register starvation (on X86).
  • Minor improvements to suggestion for misspelled name.
  • Removed experimental analyzer for strict aliasing (too many false positives). May get revisited in the future.
  • Added more intrinsics, optimizations, warnings, bugfixes, you name it!
  • Added minimal support for some new Stupid Microsoft Tricks (TM).
  • Changed default architecture to X64.
  • Macro assembler:
  • Added support for Pelles C Debug Info, dropped support for Microsoft CodeView info.
  • Added some new instructions.
  • Changed default architecture to X64.
  • Linker:
  • Added support for Pelles C Debug Info, dropped support for Microsoft CodeView info.
  • Added support for UTF-8 encoded .drectve sections.
  • Removed linker option /OPT:WIN98, /OPT:NOWIN98.
  • Raised default OS version to 6.0 for console and windows programs.
  • Fixed problem linking drivers.
  • Dump utility:
  • Added dump of Pelles C Debug Info.
  • Added support for some new instructions in the disassembler.
  • Registry editor:
  • Added support for importing and exporting .REG files.
  • Added support for Registry key permissions.
  • Install builder:
  • Added commands SectionGroup, SectionGroupEnd, MixedBitmap and UninstallCaption.
  • Added variables $ESTIMATEDSIZE, $INSTALLDATE, $LASTERROR, $LASTERRORTEXT, $PROFILE, USERPROFILES, $USERPROGRAMFILES, $USERPROGRAMFILESCOMMON and $WIN64.
  • Added command line option /OUT.

New in Pelles C 8.00 (Aug 18, 2016)

  • General:
  • All command-line tools will now write errors and warnings to stderr, other messages to stdout.
  • Added Windows include files camerauicontrol.h, compressapi.h, dpapi.h, dxgiformat.h, elscore.h, elssrvc.h, icftypes.h, lsalookup.h, netfw.h, shellscalingapi.h, versionhelpers.h.
  • Removed Windows Mobile and ARM support.
  • IDE:
  • Many changes in the debugger - some visible, some not. Breaking change for debugger expressions involving vector registers (can affect saved watch expressions). See the help file for more information.
  • Added add-in interface for the debugger.
  • Added new profiler mode "call tree", and ability to print the result.
  • Added support for importing Visual Studio 2010/2012/2013 projects through the "Import MSVC project" wizard. Not every project will be perfectly imported, for various reasons.
  • Added full-text search to the built-in HtmlHelp viewer. (One way to use the full-text search information, in general, is to search for "8.0" to find all changes for this release.)
  • Added full-screen mode.
  • Changed to private implementation of the MDI tab control (for new Close button).
  • Revised the file dependency scanner for C files; added support for (some) preprocessor conditions and support for add-in scanners.
  • Minor improvements to the C code formatter. For example, should get less confused about extern "C" { ... } surrounded by #ifdef __cplusplus, #endif.
  • Added new "External files" branch to project tree, for easier identification of files located outside the top-level project directory.
  • Changed request for execution level to below Administrator for better cooperation with UAC. For special tasks yoy may have to run the IDE as Administrator.
  • Added attempt to identify the format of a custom resource type, for opening the resource in the proper editor.
  • Added support for embedded null characters in a string table resource.
  • Added support for more resource languages, including "neutral".
  • Added new, and removed some old, add-in examples.
  • Many minor changes, fixes, and improvements.
  • Compiler:
  • Added support for OpenMP 3.1.
  • Added new intrinsics for BMI1, BMI2, LZCNT, TZCNT, RTM, and AVX2 (mostly X64).
  • Added more optimizations, but few will (of course) affect all programs.
  • Added more warnings, and an exprimental analyzer for strict aliasing (warning level 2).
  • Added #pragma default_convention() to deal with annoying third-party header files.
  • Added /T option formats x64-coff and x64-asm as better aliases for amd64-coff and amd64-asm, respectively.
  • Many minor changes, fixes, and improvements.
  • Macro assembler:
  • Added new option /Fl to produce a list file. See the help file for more information.
  • Added operators SECTIONREL and IMAGEREL.
  • Added instructions for BMI1, BMI2, LZCNT, TZCNT, RTM, and AVX2.
  • Added prefix XACQUIRE and XRELEASE.
  • Added type OWORD and YWORD as (maybe better) aliases for XMMWORD and YMMWORD, respectively.
  • Added support for user-defined prologue and epilogue macros.
  • Linker:
  • Added new options /DBG, /DYNAMICBASE, /HIGHENTROPYVA, and /INTEGRITYCHECK. See the help file for more information.
  • Incompatible change for option /SECTION. See the help file for more information.
  • Added richer COFF debug info, and support for fabricating some CodeView debug info if missing.
  • Added support for embedded manifest files.
  • Added private implementation of image checksum calculation (removed dependency on imagehlp.lib).
  • Added support for Microsoft anonymous header objects.
  • Removed attempt at converting newer (undocumented) Microsoft Codeview debug info.
  • Library manager:
  • Added support for Microsoft anonymous header objects.
  • Resource compiler:
  • Added support for embedded null characters in a string table.
  • Make utility:
  • Added a few more features for compatibility with Microsoft's NMAKE. See the help file for more information.
  • Dump utility:
  • Added dump of type libraries (.tlb).
  • Added dump of .NET metadata and a minimal CIL disassembler (for fun).
  • Added support for BMI1, BMI2, LZCNT, TZCNT, RTM, and AVX2 instructions in the disassembler.
  • Added dump of Microsoft anonymous header objects.
  • Added dump of content in a HTML or manifest resource.
  • Added support for dump of embedded null characters in a string table resource.
  • Install builder:
  • Added statements ExecMSI, FindFile, InstallService, UninstallService, ReadXMLStr and WriteXMLStr.

New in Pelles C 7.00 (Aug 18, 2016)

  • General:
  • Added support for C11, the most recent C standard (as of December 2011). See the help file for more information.
  • Added new command-line tool, POCERT, for creating and managing certificates.
  • Added new command-line tool, POH2INC, for converting C to assembler include files.
  • The assert macro should now interact better with the debugger.
  • IDE:
  • Added optional Welcome page.
  • Added web browser, including limited support for HTML Help files (Contents and Index pages, but no Search page).
  • Added file difference utility, for comparing two sets of files.
  • Added new disassembler for the debugger.
  • Added possibility to include user-defined file type in ZIP-archives (for projects and workspaces).
  • Revised the general options dialog pages.
  • The file dependency scanner will now attempt to better handle dependencies on not-yet-built files, in the same project.
  • Many minor changes, fixes, and improvements.
  • Compiler:
  • Added support for the C11 standard, including optional multithreading and atomic functions.
  • Added option for selecting between the C11 and C99 standard.
  • Added about 150 intrinsic functions for AVX(1) on X64.
  • Added option for signed integer overflow trap.
  • Added option for Microsoft's hotpatching.
  • Added what might turn into full static code analysis later; no specific option, so enabled for now with /W2.
  • Added support for Microsoft special "charize operator" (#@) in the preprocessor.
  • Added new __declspec attributes; see the help file for more information.
  • Added support for matching include files by volume number and file index when available (for #pragma once).
  • More const data should now go into the .rdata section.
  • Many minor changes, fixes, and improvements.
  • Macro assembler:
  • Added instructions for AVX(1), AVX-AES, RDTSCP, RDRAND.
  • Minor revision and bugfix for PTR declarations.
  • Better error message in some situations.
  • Make utility:
  • Added many features to make it more compatible with Microsoft's NMAKE. See the help file for more information.
  • Dump utility:
  • Added dump of private key files (.PVK).
  • Added new disassembler.
  • Install builder:
  • Added new statement, EnumRegValue.

New in Pelles C 6.50 (Aug 18, 2016)

  • General:
  • Added C runtime function gettimeofday.
  • Added additional buffering for stdout and stderr in C runtime functions fprintf, fprintf_s, fputs, fputws, fwprintf, fwprintf_s, printf, printf_s, puts, vfprintf, vfprintf_s, vfwprintf, vfwprintf_s, vprintf, vprintf_s, vwprintf, vwprintf_s, wprintf, wprintf_s.
  • Added some definitions for Windows 7, new include files, and new import libraries.
  • Fixed problem where Ctrl+Z ending a text file could cause an infinite loop in POMAKE, POCB, POMC, PODUMP, POASM, etc.
  • IDE:
  • Added (minimal) support for DPI-awareness.
  • Added integrated sampling profiler - to complement the older instrumenting profiler.
  • Added support for folding point hovering in the source editor.
  • Added support for Ctrl+MouseWheel zooming in the source editor.
  • Added support for #include file completion in the source editor.
  • Added support for 'member function' call tips in the source editor (like COM interfaces, or other function pointers in a structure).
  • Added caching to the 'Update all dependencies' command, which can significantly reduce the scan time for a large project.
  • Added support for writing a resource symbol include file using UTF-8 encoding (special case that hopefully works now).
  • Revised the font detection and enumeration code. Added creation of monospaced font based on characteristics (and Windows version); this will affect the debugger and hex-dump window, for example.
  • Without relevant support from Microsoft, the IDE now got it's own dialog manager that will attempt to construct dialogs with the correct system font depending on the Windows version (and mode).
  • The resource preview pane will now look for images in RCDATA resources too.
  • The path for POC_PROJECT_OUTPUTDIR, POC_PROJECT_RESULTDIR, and POC_PROJECT_WORKPATH symbols is now stored in project files with a relative path. This bumps the project file version to 6.50; a project loaded once in version 6.50 will no longer load in older versions of the IDE.
  • The path to an add-in module is no longer stored in the settings (Registry or XML file), since all modules must be stored in the same (fixed) directory.
  • Moved the 'Resource symbols' and 'Resource includes' command from the View menu to the Resource menu (the reasons for placing them in the View menu are no longer valid).
  • The debugger will now show a multi-line tooltip when hovering over a structure or array, displaying more information.
  • The debugger thread pane can now be used to select the 'active' thread, which will affect the view in other windows.
  • The debugger stack walker pane can now handle extra aligned stack frames from POCC (X86).
  • Revised the grid drawing algorithm in the dialog editor.
  • Several minor changes and fixes.
  • Compiler:
  • Finally found an acceptable way of supporting more than two intrinsic arguments. This improved some functions (like memset and memcpy), but mainly opened the door to many new intrinsic functions...
  • Added about 400 intrinsic functions for SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AES on X64. Added internal support for SIMD types __m128, __m128d, __m128i; note that the types must be 'activated' with a proper typedef, normally by including a file like xmmintrin.h or emmintrin.h.
  • Added classic loop optimizations like invariant code motion and strength reduction.
  • Added global subexpression elimination.
  • Added optimizations for access to thread-local variables.
  • Added option /GT for fiber-safe TLS access. Probably not very useful, but seemed easy to add.
  • Added basic support for tail recursion elimination.
  • Replaced the internal control flow graph with a better implementation. More transformations are now possible, like reordering the basic blocks of a function using various branch heuristics.
  • Replaced the internal handling of structured exception handling (many places affected). This change was needed for cleaner cooperation with the control flow graph, but also to be able to produce better code for X64. Some warnings will be better for all targets.
  • Revised handling of compound literals. The compiler will accept a few more valid cases and will optimize better; the optimizations will also affect some initializers.
  • The types __int8, __int16, __int32, and __int64 are now keywords in Microsoft mode (rather than preprocessor definitions), but will soon map to other basic types; shouldn't matter much in practice. To make things more complete, the integer constant suffixes I8, UI8, I16, UI16, I32, UI32 are now accepted in Microsoft mode (previously only I64 and UI64).
  • The __unaligned pointer specifier can now be used on SIMD types, to tell the X64 code generator to use the unaligned load and store instructions.
  • The attributes __ptr32 and __ptr64 are now keywords in Microsoft mode (rather than preprocessor definitions), but they remain no-ops.
  • Added support for __declspec(deprecated); mainly intended for obsolete C runtime functions, but can be useful in user code too.
  • Added better check for enum tag compatibility in declarations.
  • Added macro replacement for private #pragma's (not STDC #pragma's, since this is not allowed by the C99 standard).
  • Fixed problem with pragmas not being associated with the correct (inline) function.
  • Fixed problem where a redeclaration of a global symbol wasn't always catched by the frontend, leading to somewhat cryptic messages from the backend.
  • Fixed problem in preprocessor with the ## operator and empty arguments (internal handling of C99 'placemarker' preprocessing token).
  • Fixed problem with clobbering of 8-byte values (double/long long/struct) loaded through a pointer (ARM).
  • Fixed one attempt at coalescing register ranges, since this could sometimes reuse a register too soon (pretty rare, in my experience) (all targets).
  • Many minor changes and fixes.
  • Macro assembler:
  • Fixed and improved handling of some addressing modes.
  • Fixed problem with infinite recursion after syntax error in nested struct directive.
  • Added missing cmpxchg16b instruction.
  • Linker:
  • Added option /MAPINFO:PATHS.
  • Fixed problem with safe exception handler table not always being sorted by address (X86).
  • Fixed "problem" with unexpected load configuration in the middle of a segment, which can only happen with assembly modules (X86).
  • Browse information manager:
  • Added some support for parsing COM interfaces.
  • Added more guesses for better parsing of Windows include files (part of the syntax may be hidden in a currently unknown macro, for example, making it very easy for the browse manager to get lost).

New in Pelles C 6.00 (Aug 18, 2016)

  • 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.
  • 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.

New in Pelles C 5.00.1 (Aug 18, 2016)

  • General:
  • Added support for 64-bit Windows (AMD64/X64 processors); only tested on Windows Vista 64-bit edition.
  • Windows 9X is no longer supported as a build environment, and special handling for that environment has been removed (except in the C runtime; compiled programs should still run on Windows 9X).
  • Many tools are now using the Unicode version of the Windows API; they are marked below as 'Unicode-only' programs.
  • Added support for UTF-8 and UTF-16LE encoded text files (source files, resource scripts, module definition files, and so on). The support for UTF-16LE is more complete at the moment.
  • Added new code signing utility: POSIGN (Unicode-only program).
  • Added support for C99 complex math in the compiler and the C runtime (_Complex but not _Imaginary, for now).
  • Added exprimental support for more secure C runtime functions from ISO TR24731-1.
  • Library and include files are now in separate directories for Win32/Win64/WinCE. Renamed some WinCE libraries back to the original Microsoft names, and updated almost all WinCE include files.
  • Speed improvements in the code generator, shared by the C compiler and the macro assembler.
  • Revised thread locking for stream functions in the C runtime.
  • Added support for (thread-specific) locale settings in the C runtime.
  • Some C runtime functions, like memcpy and memset, are now more optimized (X86, AMD64). Will use MMX/SSE instructions when available on the host machine.
  • The debugger and the binary file dumper now use the same disassembler library (consistency).
  • Added more error codes to errno.h.
  • Added non-standard 'P' format specifier for the printf family.
  • Added more support for huge files, including a modified fpos_t type.
  • Removed (outdated) DirectX files for desktop Windows; people with more interest in DirectX than me can probably figure out how to use the new versions anyway.
  • Bugfix: negative sign possibly lost by _itoa(), _ltoa(), _itow(), _ltow().
  • IDE:
  • Unicode-only program.
  • Added support for 64-bit project types (POIDE64 only).
  • Added support for 64-bit debugging (and 32-bit debugging on Windows Vista; POIDE64 only).
  • Added support for Install builder projects, and CAB builder projects (Windows Mobile).
  • Added support for storing settings in XML files using new /xml command line option.
  • Added support for explicit selection of UI language using new /L command line option.
  • Added prestart program (poide.com) for displaying help using new /? command line option.
  • Removed dependencies on WinHelp, and revised F1 help for the entire IDE.
  • Revised handling of the 'system definitions' database, and browse information in general.
  • Revised focus handling; tab pages and the project pane can now receive focus, for example. Added keyboard interface for tab pages.
  • Added (limited) support for importing Visual Studio 2005/2008 projects (maybe 2003 too).
  • Added Unicode version of all add-in macros.
  • Increased limit to 16 user-defined tools and help files.
  • Added support for UTF-8 and UTF-16LE encoded text files (source editor).
  • Added support for UTF-8 and UTF-16LE encoded files in 'Find in files', which is now also less fuzzy about white-space.
  • Added support for code snippets by language, including 16 'surround by' snippets (source editor).
  • Revised all syntax color parsers (source editor).
  • Added folding of #if, #ifdef, and #ifndef blocks (source editor).
  • Added a few more attempts at making the 'smart indent' mode less stupid (source editor).
  • Added support for UTF-8 and UTF-16LE encoded project files.
  • Moved default location for project files away from the 'Program Files' branch.
  • Added support for building (and rebuilding) an entire workspace.
  • The extended project settings (.ppx files) are now stored in XML files.
  • Added less optional project settings for LIB and INCLUDE environment variables, together with predefined project symbol PellesCDir, to handle library and include files being moved to separate directories.
  • Added more consistent use of LIB and INCLUDE environment settings (open #include file, scan for dependencies, and so on).
  • Added 'Open As' to project tree context menu; makes it easier to open a resource script in text mode, a source file in hex mode, and so on (previously supported by add-ins).
  • Added support for code signing in projects (using new POSIGN tool).
  • Added Unicode version of project wizard API functions.
  • Added support for UTF-8 and UTF-16LE encoded resource scripts (resource editor).
  • Added 'New HTML resource' command (resource editor).
  • Added support for new dialog controls: IP-address, Native font (maybe not so useful), Split Button, Command Link, SysLink, and Net Address (dialog editor).
  • Added support for MS Shell Dlg and MS Shell Dlg 2 font in extended dialogs (dialog editor).
  • Added help identifier property for extended dialogs (dialog editor).
  • Added a few more selections to the version resource editor.
  • Added 'Find' and 'Find next' support to stringtable resource editor.
  • Symbolic names of styles introduced by custom controls will now be written directly to the resource script if the proper include file wasn't included (avoiding problems reopening the script).
  • Added options dialog for debugging standalone EXEs.
  • Added support for debugger pseudo-variables @ERR, @PID, @TID, and @TIB/@TEB.
  • Added support for selecting groups of registers to view in the debugger.
  • Added support for debugging custom controls.
  • Revised stack walking code for X86, ARM, and AMD64/X64 (debugger).
  • Revised code for connecting to, and disconnecting from, the remote server (Windows Mobile).
  • Added proportional image resizing (image editor).
  • Added gradient rectangle tool (image editor).
  • Added support for PNG compression in Windows Vista icons (image editor).
  • Added support for transparent color in GIF files (Image editor).
  • Added support for 24 bits-per-pixel PCX images (pretty obsolete format, but trivial enough).
  • Added 'Find' and 'Find next' support to binary dump editor (search for ASCII string inside the binary data).
  • Added better scrolling in the binary dump editor.
  • Minor changes for Windows Vista, and several minor bugfixes.
  • Removed exprimental custom assembler support.
  • Compiler:
  • Unicode-only program (preprocessor and lexer).
  • Added support for AMD64/X64 code generator.
  • Added support for UTF-8 and UTF-16LE encoded source files; removed support for #pragma code_page().
  • Added __POCC_TARGET__, __POCC_DEBUG__, and __STDC_IEC_559_COMPLEX__ builtin macros.
  • Revised memory management; should use less overall memory.
  • Added support for #pragma once.
  • Added support for C99 STDC #pragma's CX_LIMITED_RANGE, FENV_ACCESS, and FP_CONTRACT.
  • Added stricter C99 float-to-int conversions in standard mode.
  • Added C99 block scopes for selection and iteration statements.
  • Added support for preprocessing to file (new /P option).
  • Revised exception and unwind handling code (X86, ARM).
  • revised _alloca() code.
  • Changed /Op option to /fp option; /Op maps to /fp:precise, /Op- maps to /fp:fast. The /fp option will affect more things than the old /Op option.
  • Added many new intrinsic functions; see help file.
  • Added parsing of __declspec(deprecated[(text)]); no message is currently issued (too annoying when using Microsoft include files).
  • Alignment requirement larger than 8 bytes, for stack variables, will attempt to align the stack pointer (X86).
  • Added __alignof operator (and __alignof__ extension).
  • Use of __declspec(align(n)) will propagate better for nested structs.
  • Revised bitfield handling and added support for long long bitfields (Microsoft mode).
  • Added support for UCN in character literals, string literals, and identifiers.
  • Added support for the '$' character in identifiers.
  • Revised __fastcall handling to be more consistent with Microsoft.
  • Added annotation of the C runtime exeception handler for /SAFESEH linker option.
  • Bugfix: postfix expression lost for compound literals.
  • Bugfix: compound literals didn't always work with sizeof operator.
  • Bugfix: some cases of pointer to VLA didn't work.
  • Bugfix: fixed association bug with C99 idempotent type qualifiers.
  • Bugfix: added C99 storage class check for identifier declared in a for statement.
  • Bugfix: __leave statement only allowed in __try blocks.
  • Bugfix: functions returning a struct or union in Microsoft mode will now return a pointer to the hidden value location.
  • Bugfix: empty inline functions could cause an access violation.
  • Bugfix: some cases of indexing a C-symbol array didn't work in the inline assembler (X86).
  • Bugfix [5.00.1]: a return statement, using the conditional operator (?:), containing a fetch with postfix increment (*p++), usually turned the postfix increment into a prefix increment (X86, X64).
  • Bugfix [5.00.1]: a float-to-integer conversion, in standard C mode, without optimizations, produced the wrong code sequence (X86).
  • Macro assembler:
  • Added support for :DEF: operator in ARM mode.
  • Added support for bar-delimited identifiers in ARM mode.
  • Added warning for label without colon in ARM mode.
  • Added support for Intel Wireless MMX instructions in ARM mode.
  • Added .CORE processor type in X86 mode.
  • Added support for .SAFESEH directive in X86 mode.
  • Changed fastcall handling to match the C compiler.
  • Added WRT operator, for RIP-relative addressing in AMD64 mode.
  • Added minimal support for UTF-16 encoded source files (see help file).
  • Added better error message for bogus character in a source file.
  • Added support for SSSE3 and SSE4 instructions in X86 mode.
  • Revised IFB, ELSEIFB, IFNB, ELSEIFNB handling (X86, AMD64).
  • Added support for forward definition of PTR type (X86, AMD64).
  • Compiler driver:
  • Unicode-only program.
  • Added /o option; a combination of the /Fo and /Fe option, depending on the file extension.
  • Added better support for just linking files.
  • Added recognition of .o file extension.
  • Response files may now use UTF-8 and UTF-16LE encoding.
  • Linker:
  • Added support for AMD64/X64 machine.
  • Added support for DLL forwarding: from the command line, and in module definition files.
  • Removed /OLDIMPLIB option and support for old style import libraries.
  • The module definition file parser will now check for 'stop characters' rather than 'valid characters', allowing more oddball symbol names (without quotes).
  • Module definition files may now use UTF-16LE encoding.
  • Response files may now use UTF-16LE encoding.
  • Added /SAFESEH option (X86).
  • Added /ALLOWISOLATION option.
  • Added /NXCOMPAT option.
  • Added /ALTERNATENAME option.
  • Added /MANIFEST, /MANIFESTDEPENDENCY, and /MANIFESTFILE options.
  • Added recognition of .a file extension (silly, but anyway).
  • Added more tests to reject bogus object files from buggy external translators (not from Pelle's toolchain).
  • Revised internal default value handling; slightly better at guessing some values the lazy programmer didn't bother to specify...
  • Revised stub file management and alignment.
  • Linking with a library containing multiple/merged import libraries should work now.
  • Library manager:
  • Added support for AMD64/X64 machine.
  • Will now auto-detect file types based on content, not just the file extension (recognizing .o and .a file extension, for example).
  • Removed /OLDIMPLIB option and support for old style import libraries.
  • The module definition file parser will now check for 'stop characters' rather than 'valid characters', allowing more oddball symbol names (without quotes).
  • Module definition files may now use UTF-16LE encoding.
  • Response files may now use UTF-16LE encoding.
  • Binary file dumper:
  • Added dump of certificates.
  • Added dump of new items for AMD64/X64.
  • Added /UNWINDINFO option.
  • Added /LOADCONFIG option.
  • Added support for SSSE3 and SSE4 instructions in the disassembler (X86).
  • Added support for UTF-16LE encoded source files (not UTF-8).
  • Added LONGLONGS format to /RAWDATA option.
  • Resource compiler:
  • Unicode-only program.
  • Added support for UTF-8 and UTF-16LE encoded resource scripts.
  • Added support for Windows Vista icons (using PNG compression).
  • Added support for PUSHBOX controls (consistency).
  • Added support for extra control data in DIALOGEX resources (currently *not* supported by the IDE).
  • Added /N option; support for appending a null character to all strings in the STRINGTABLE resource.
  • Message compiler:
  • Unicode-only program.
  • Added support for UTF-8 and UTF-16LE encoded message scripts.
  • Added support for OutputBase statement.
  • Added support for TagName statement, and /T option.
  • Browse information manager:
  • Unicode-only program.
  • Added support for UTF-8 and UTF-16LE encoded source files.
  • Added support for parsing install builder scripts.
  • Browse information is now stored in SQLite3 databases.
  • Make utility:
  • Unicode-only program.
  • Added support for UTF-8 and UTF-16LE encoded makefiles.
  • Added support for '.phony' targets.
  • Fixed path handling code for pre-requisites.
  • Bind utility:
  • Unicode-only program.
  • Rebase utility:
  • Unicode-only program.
  • Added support for 64-bit executables.
  • Install builder:
  • Added variables $ADMINTOOLS, $ADDDATA, $COMMONADMINTOOLS, $COMMONAPPDATA, $COMMONDESKTOP, $COMMONDOCUMENTS, $COMMONFILES32, $COMMONFILES64, $COMMONFILES, $COMMONSMPROGRAMS, $COMMONSMSTARTUP, $COMMONSTARTMENU, $DOCUMENTS, $PROGRAMFILES32, $PROGRAMFILES64 and $SENDTO.
  • Added SetRegView statement.
  • Added support for Windows Vista, and minimal support for 64-bit Windows.
  • CAB builder:
  • Added support for UTF-16 encoded scripts.
  • Added support for user-defined _setup.xml (CPF) using new /Fx option.
  • Registry editor:
  • Unicode-only program.
  • Process viewer:
  • Unicode-only program.
  • Screen capture for Windows CE:
  • Unicode-only program.
  • Copy utilities for Windows CE:
  • Unicode-only program.
  • Bugfix: will remove the partial file on failure.

New in Pelles C 4.50.113 (Aug 18, 2007)

  • General:
  • Added C runtime functions _popen, _pclose, _cgets, _cputs, _getopt, _sleep, _filelength64, _lseek64, _tell64, _findfirst64, _findnext64, _wfindfirst64, _wfindnext64.
  • Revised code for the screen saver library (srcnsave.lib and scrnsavw.lib).
  • Fixed a name decoration bug for _dlopen, _dlclose, _dlsym and _dlerror.
  • Added support for assert on Pocket PC.
  • Added new tool: POASM (macro assembler).
  • [Beta 2] Renamed some macros in wctype.h to avoid errors when compiling for Pocket PC.
  • [Beta 2] Added cecrypt.lib for Pocket PC (renamed from crypt32.lib to avoid some confusion with the Win32 version).
  • [Beta 4] Added time() for Pocket PC (crtce.lib), and excluded non-supported functions from time.h.
  • [Post beta 5] Added files for Pocket PC (mostly Windows Mobile 5): activesync.h, ceddraw.h, cfgmgrapi.h, connmgr.h, connmgr_conntypes.h, connmgr_proxy.h, connmgr_status.h, d3dm.h, d3dmcaps.h, d3dmtypes.h, d3dmx.h, d3dmxerr.h, d3dmxmath.h, d3dmxtex.h, devload.h, devmgmt.h, fdrm.h, getdeviceuniqueid.h, gpsapi.h, lass.h, pm.h, regext.h, service.h, soundfile.h, snapi.h, windbase_edb.h, d3dmx.dll, d3dmx.lib, gpsapi.lib.
  • IDE:
  • The debugger will now support remote debugging on Pocket PC (and Smartphones). A pretty big change.
  • The debuggers 'Memory' tab will now support local variables and a context menu for the current view (byte/short/long/etc).
  • The debugger should now be able to 'step over' a return instruction (X86).
  • Added support for some cases of pointer[index] in the debugger expression evaluator.
  • Added context menu with option to toggle decimal/hexadecimal view in all symbol windows in the debugger.
  • Added more support for register variables in the debugger (pointers, for example).
  • [Beta 3] Added better support for register-pairs in the debugger (mostly ARM targets).
  • Added support for #pragma region and #pragma endregion in the source code editor. For user-defined folding blocks.
  • POASM is from now on the default assembler for new projects (not MASM). It is also supported for Pocket PC projects. The syntax color highlighter for assembly files will now only support POASM-specific keywords (not MASM).
  • Added support for POASM keyword lookup in the source code editor (like C keywords). If the active project is for Pocket PC (or Smartphone), the assembly file is considered to be in ARM mode (using ARM keywords), in all other cases it is assumed to be in X86 mode (using X86 keywords).
  • Added support for 'Open As'. It is now possible to open an executable file in the binary editor, a resource script in the source code editor, and so on.
  • Added support for 'RichEdit 2.0' controls in the dialog editor.
  • Added support for adding new controls through the keyboard in the dialog editor.
  • Added support for resizing a control through the keyboard in the dialog editor (Shift Arrow keys).
  • Added support for toggling a breakpoint using the mouse, in the margin of the source code editor.
  • Added support for opening an arbitrary include file in the source code editor. Works for both C and assembly files.
  • Added support for manually activating the call tip window.
  • Added support for different values for the 'tab' and 'indent' size (the indent size don't have to be a multiple of the tab size anymore).
  • [Beta 2] Added support for a visual cue about 'matching braces' (really { } ( ) and [ ]).
  • [Beta 3] Added tooltip support for MDI tabs.
  • When loading a resource script, any errors will now be reported on the Build tab (not through message boxes).
  • The source code editor will now display the name of the current function on the status bar.
  • Bugfix: fixed a problem with FPU/MMX registers in the debugger.
  • Bugfix: dialogs created with 'some other tool' might not have DS_SETFONT, and associated font data, which could cause some strange effects (including crashes).
  • Bugfix: NOINVERT was never written for accelerator tables in resource scripts.
  • Bugfix: classification into ASCII or VIRTKEY didn't always work for accelerator tables written to resource scripts.
  • Bugfix: attempt to support the Delete key in some windows at the bottom tab (don't send the key to the active MDI window).
  • Bugfix: some operations on the Breakpoint tab could crash due to a NULL pointer.
  • Bugfix: the folding/unfolding logic could sometimes cause a crash.
  • Bugfix: fixed a problem with scrollbars not (re-)synchronizing after growing an image in the image editor.
  • Bugfix: filling with a color that seemed different on the surface, but after palette transformations turned out to be the same color, could cause a stack overflow in the image editor (256 color images).
  • Bugfix [Beta 2]: fixed problem with items on menubars that didn't open a popup menu (mostly Smartphones, but also Pocket PC).
  • Bugfix [Beta 3]: the call tip window will now use the selected text colors when painting the current argument (should work with *anycolor settings).
  • Bugfix [Beta 3]: deleting complex items from the Watch panel, like arrays and structures, was buggy.
  • Bugfix [Beta 3]: editing a Manifest resource could leave up to three garbage characters at the end (DWORD alignment).
  • Bugfix [Beta 3]: the last entry in an accelerator table resource will now be correctly flagged as such (when saved in RES format).
  • Bugfix [Beta 3]: using filenames with embedded ( and ), on the build and output tabs, should now work.
  • Bugfix [Beta 4]: a workspace ZIP file could previously contain some duplicate files.
  • Bugfix [Beta 5]: Undo in Image editor, after Grayscale/Sepia/..., didn't restore palette colors correctly.
  • Bugfix [Beta 5]: saving a file with an undo queue, and then undoing everything, will no longer set state back to 'not dirty' (a stupid thing to do in the first place, but anyway).
  • Compiler:
  • New backend code generator for both X86 and ARM, shared with the macro assembler. Responsible for converting assembly instructions into byte sequences, generating debug info, and emitting COFF object files. This means (among other things) that the inline assembler parser (X86 and ARM) is new, and that the compiler assembly output looks slightly different. This is a big change.
  • Added several new optimizations - both general and machine specific.
  • The const qualifier will now be considered much more when generating code for initializers, compound literals, and local variables. Use it when it's appropriate, and the generated code will be better.
  • The compiler will now try to identify variables that should be handled as 'volatile' around a __try-__except block - for better code (not just assume that they are all 'volatile').
  • Added support for #pragma region and #pragma endregion.
  • [Beta 3] Added support for #pragma check_stack( [{on|off}] ) and #pragma ftol( [inlined] ).
  • Added support for __debugbreak intrinsic function. Will generate a breakpoint instruction for X86 or ARM, but only when debugging info is turned on (when the /Zd or /Zi compiler option is used).
  • Added support for 'multi-byte' character constants in Microsoft mode ('abcd').
  • Moved warning about 'possible loss of data' to a different part of the compiler. It will catch less cases than before, but will also produce less false warnings.
  • [Beta 3] The C compiler now maps a typedef for whar_t (unsigned short) to an internal type, in an attempt to preserve this 'special' type for CodeView debugging info and error/warning messages.
  • Bugfix: switch statements using an unsigned value could crash.
  • Bugfix: attempting to use a huge number of wide string literals could crash the compiler.
  • Bugfix: some combinations of relative path's in #include directives and command line arguments didn't work as expected. Maybe works better now?
  • Bugfix: some conformance problems with compound literals, variable-length arrays, and _Bool.
  • Bugfix (ARM): problems with incoming/outgoing arguments in functions using _alloca.
  • Bugfix (ARM): receiving a structure by value didn't work.
  • Bugfix (ARM): shifting a signed long long value right didn't work.
  • Bugfix (ARM): attempting to use the hook function (/Gh) didn't work.
  • Bugfix (X86): problems with some instructions when argument was 'out of bounds'.
  • Bugfix [Beta 3]: The option /Zl (omit default library name) will no longer cause a reference to the __fltused symbol in Microsoft mode.
  • Bugfix (ARM) [Beta 3]: right-shifting an unsigned long long didn't work for high 32 bits.
  • Bugfix (ARM) [Beta 3]: added automatic dumping of literal pools, for "big" blocks of straight-line code.
  • Bugfix (ARM) [Beta 3]: bitwise AND (&), OR (|), XOR (^) immediate values were sometimes "uncodable".
  • Bugfix (X86) [Beta 4]: intrinsic versions of _rotl(), _rotr(), _lrotl(), _lrotr(), and _bswap() are less likely to clobber the register allocator.
  • Compiler driver:
  • Added support for PORC and resource scripts.
  • Added support for POASM, and option /a for backward compatibility.
  • Will now automatically add /DEBUG linker option, when /Zi compiler or assembler option is used.
  • Linker:
  • Added attempt to convert newer Microsoft CodeView information (in object files) to the older format that can be handled by the debugger and other tools.
  • Added support for NONAME keyword in module-definition (DEF) files.
  • Added support for Microsoft-style long section names (in the COFF string table).
  • Should now support old-style resource files from CVTRES (why one would actually need it, is another matter).
  • Possibly more correct handling of weak externals.
  • Increased the maximum size for export object files (for 'Dylan', really).
  • Bugfix: fixup of absolute symbols didn't always work as expected (in some rare cases).
  • Library manager:
  • Added support for NONAME keyword in module-definition (DEF) files.
  • Revised code for /EXPLODE option - see help file.
  • Binary file dumper:
  • Rewritten disassembler for ARM, modified disassembler for X86, new disassembler for AMD64 (mostly a preview).
  • Added support for PE32 files and several AMD64-specific sections.
  • Added support for dumping Windows CE/ARM exceptions. Added new /PDATA option for this.
  • Added more support for Microsoft's undocumented PDB files, including the new RSDS format. Still many 'unknown' fields. (If a smart person can figure out the format of the (assumed) hash streams for symbols and types - either JG or DS format - it might be possible to *createPDB files from the linker. This is a 'show stopper' right now. I will not waste more time investigating this, unless I get more information from someone/somewhere.)
  • Added support for several new CodeView record types.
  • Added support for Microsoft-style long section names (in the COFF string table).
  • Revised dump of exported symbols to handle 'ordinal only' ('NONAME').
  • Resource compiler:
  • Added support for merging multiple strings in a row ("A" "B" "C" -> "ABC"), to handle some preprocessor/macro expansions.
  • Added warning when keyword used as an identifier.
  • Added support for memory flags on some resource types (mostly for consistency).
  • Browse information manager:
  • Added support for POASM-specific keywords (and removed support for MASM-specific keywords).
  • Bugfix: unbalanced conditional code (#if -- #endif) could cause an infinite loop.