Open Watcom Changelog

What's new in Open Watcom 1.9

Dec 4, 2010
  • The NULL macro is now defined as ((void *)0) for C; for C++, NULL is still defined as 0 or 0L as previously. This change may require modifications to user code if NULL was incorrectly used as an integer constant. Note: The 16-bit windows.h header defines NULL as 0; for 16-bit Windows programming, the effective definition of NULL depends on whether windows.h or one of the standard C headers is included first.
  • The C compiler has improved handling of the _Bool type (C99 mode specific). The _Bool type can now generally be used in expressions wherever an integer may be used.
  • The C compiler now considers enumeration types to be compatible with their underlying integer type, as required by ISO C. Note that the choice of the underlying type varies and should not be relied upon.
  • The C compiler now correctly handles initialization of static floating-point variables with 64-bit integer constants.
  • The C and C++ compilers now support the __int8, __int16, and __int32 extension keywords.
  • The 16-bit C and C++ compilers now allow the :> operator to be used in initializers of variables with static storage, as long as both operands are integer constants. This enables the use of MK_FP macro in initializers.
  • The C++ compiler now treats warning W737, implicit conversion of pointers to integral types of same size, as an error.
  • The C++ compiler now supports several new warnings: W931, warn about meaningless cv-qualifier in casts; W932, warn about meaningless cv-qualifier in function return types; and W933, warn about use of C-style casts in C++ code. These warnings must be explicitly enabled through the -wce option.
  • The code generator now eliminates redundant epilog code for 32-bit Intel processors when doing size optimization.
  • The code generator correctly handles constant folding of signed 64-bit integer division and right shift operations.
  • The code generator now supports constant folding of 64-bit integer modulo operations.
  • The code generator no longer mishandles floating-point comparisons where one operand is a variable of type float and the other operand is a constant of type double or long double.
  • The code generator no longer produces incorrect code when a constant expression of type float (e.g., 1.0f + 1.0f) is passed as an argument to a function which takes a float argument.
  • The code generator now makes more accurate decision when choosing whether a multiplication by a constant should be replaced by a sequence of shifts and additions. Results depend on target CPU type.
  • The 386 code generator now produces a CDQ instruction except when targeting a Pentium and optimizing for speed, when a MOV/SAR sequence is emitted as previously when converting a signed 32-bit integer to 64-bit.
  • The code generator no longer emits rendundant CS segment overrides when creating calls to symbols imported from DLLs.
  • The Win32 API headers and import libraries have been updated to support the new interfaces in Windows 7.
  • Support for 16-bit OLE 2.0 has been added.
  • Support for RDOS targets has been added.
  • Support for ZDOS targets has been added to the linker.
  • The floating-point exception handler for 16-bit DOS no longer crashes if the user signal handler modified DS.
  • The _floodfill() graphics library function now works correctly again.
  • The library no longer leaks memory when a thread created by _beginthread() terminates.
  • The %Lf format specifier (and related format specifiers) used with printf family functions now works.
  • The library now contains _fseeki64 and _ftelli64 functions to handle 64-bit file offset pointer for streams.
  • The library implementations of _lseeki64, _telli64, _fileleni64, _(w)stati64, _(w)findfirsti64, _(w)findnexti64 on OS/2 now properly use 64-bit file sizes and offsets.
  • The library implementations of puts and putws now correctly return EOF if they fail
  • DOS long file name (LFN) support has been added (new doslfn??.lib model specific libraries contain DOS LFN version of appropriate modules). By default DOS LFN support is enabled. It can be switch off by setup LFN=N environment variable.
  • The wasm assembler now implements support for Turbo Assembler compatible IDEAL mode. The -zcm option may be used to select this feature.
  • The assembler now supports built-in @code and @data symbols.
  • The assembler now supports ELSEIF directives for conditional assembly.
  • The assembler no longer incorrectly assumes that absolute segments are byte aligned; they are paragraph (16 byte) aligned.
  • The built-in cd command in wmake now supports quoted paths with spaces.
  • The linker now supports libraries in BSD, COFF, and GNU ar format.
  • The linker now allows stack sizes smaller than 512 bytes to be specified and does not silently override them. However, a new warning (W1172) will be emitted in such case.
  • A FULLHEADER option specific to the DOS EXE format has been added to the linker. Please see the Linker Guide for further information.
  • The library manager (wlib) now supports BSD, COFF, and GNU variants of the ar library archive format. Extended -fab, -fag, -fac options select the variant. The -fa option now selects default format depending on host platform.
  • This release introduces Open Watcom's IPF compiler (wipfc) used for creating help files on OS/2.
  • The vi editor now supports non-ASCII characters in the 0x80-0xFF range.
  • The console version of the vi editor for Windows now uses standard Windows keyboard processing; AltGr and dead keys now function correctly. Additionally, Caps Lock is only effective for keys which generate characters.
  • The editor now supports for syntax highlight of awk files.
  • The editor now supports a Select All command.
  • The windowed editor now holds the position of the replace and search/replace dialogs between invocations.
  • The wcl and wcl386 utilities now work correctly on a Linux host.
  • The DOS NetBIOS trap file and debug server have been modified to work when running on Windows NT (through NTVDM).
  • The 16-bit Windows GUI tools no longer require CTL3DV2.DLL, but still use it if the library is present.

New in Open Watcom 1.8 (Aug 6, 2009)

  • The C compiler now performs stricter type checking on enumerated types. Previously, enums were treated as their underlying type (signed/unsigned char, int, etc.) for type checks.
  • The C compiler now adds location information about enumerated symbols in appropriate diagnostics.
  • The C compiler has been improved with respect to the handling of near/far pointers, especially when converting or comparing pointers and integers of different sizes.
  • The C compiler now properly recognizes functions that do not return, such as longjmp(), and correctly diagnoses control flow issues such as unreachable code or missing return statements.
  • The C compiler now supports a #pragma alias. This pragma emits alias records into the object file for processing by the linker.
  • The C compiler now has larger capacity and can compile some complex source files that previously caused out of memory errors (E1064).
  • The C compiler now always warns about unprototyped functions (W131). Previously, some forgivable instances of missing prototypes were undiagnosed by default, which caused users to write non-portable code usually by accident.
  • Warning W139 (Divisor for modulo or division operation is zero) has been added to the C compiler. This warning is triggered whenever the right operand of an integer division or modulo operation is a constant expression with the value of zero.
  • The handling of pragam aux is now correct in cases where code is emitted and a function body already exists for the corresponding symbolic name.
  • Various fixes to the handling of the include_alias pragma have been made.
  • The C and C++ compilers now have diagnostics for meaningless comparision of 64-bit and bit-field operands.
  • The C and C++ compilers now have conversion tables from CP=1250,1252 (Latin-2,1 for Windows ANSI) to Unicode to support Windows programming.
  • The C++ compiler now supports the explicit specification of function template arguments. For example: f().
  • The C++ compiler now uses lazy instantiation for class templates and template members. Only the members actually used are instantiated.
  • The C++ compiler now allows member templates to be defined outside their class.
  • Numerous bugs in the C++ compiler have been fixed.
  • The C++ compiler allows a class declaration with modifiers to have those modifiers propagate into the class definition.
  • When -SH switch is used with the Fortran compiler, the default size of an integer constant is now INTEGER*2.
  • The Fortran compiler no longer crashes when equivalencing common/global with automatics.
  • Fortran processing for the text record EOL has been normalized. On UNIX systems write/seek uses LF and read uses LF or CRLF. On non-UNIX systems write/seek uses CRLF and read uses LF or CRLF.
  • Various code generation bug fixes to both the 16-bit and 32-bit compilers have been made.
  • The Win32 headers and libraries are now Open Watcom's own internal version. The MinGW headers and libraries are no longer being used. The new headers and libraries provider greater compatibility with the Microsoft SDK and better support for Microsoft Vista.
  • The version of Causeway in the official distribution is now version 4.03.
  • The Linux run time libraries now have recvfrom() and sendto() implementations.
  • A POSIX compatible fnmatch() function and a corresponding fnmatch.h header has been added.
  • The _dos_getfileattr() function no longer crashes in large data models on 16-bit DOS and Windows.
  • The C run time library now has implementations of the following functions to improve compatibility with other compilers: _chmod, _chsize, _creat, _dup2, _eof, _filelength, _isatty, _read, _sopen, _tell, _umask, _unlink, and _write.
  • The date and time arguments to _dos_getftime() and _dos_setftime() are now using 'unsigned int' type instead of 'unsigned short'. This change has been made to improve compatibility with other compilers.
  • The segment argument used with _dos_allocmem(), _dos_freemem() and _dos_setblock() is now unsigned int instead of unsigned short. This change was made for compatibility with other compilers.
  • The Fortran run time environment now works on Linux.
  • The Linux Fortran run time libraries now have FSYSTEM and FSPAWN implementations.
  • The Fortran run time now exposes the saved stack pointer for when crashes occur in the IO subsystems.
  • The debugger's options context menu now has an option to allow all child nodes to be expanded recursively.
  • The debugger now uses the full size of the type when displaying hexadecimal values (for example 0x03 instead of 0x3).
  • The debugger now has a new menu entry to change the display format of all values in an array (all hex or all decimal).
  • The debugger now supports break on write rather than just break on change. The trap must support exact breakpoints for this to happen.
  • The Windows debugger now properly handles quoted program names.
  • The Windows debugger now has proper color support.
  • The NetWare TCP server and trap have been updated for NW6.5SP7 with the latest libcpre.obj file.
  • The DOS real-mode trap file (std.trp) now correctly displays high parts of 32-bit registers on 386+ CPUs. Previously, the high parts were always displayed as zeros.
  • WLIB now has a new -pa option to set up library page size automaticaly to optimal size.
  • WLIB now handles COFF import libraries more correctly.
  • WCL now properly handles the -fd and -fm options without the file name specified.
  • WASM now handles EXTERNDEF directives properly; an EXTDEF record is created only if the symbol is actually referenced.
  • WASM now handles the auto-dependency filename properly.
  • WASM now implicitly creates the __UNIX__ macro for the BSD target as it has for LINUX and QNX.
  • The internal version numbers for WASM and WMAKE are now compatible with that used by the C and C++ compilers. Specifically the macro __WASM__ has the value 1280 for WASM and the macro __VERSION__ has the value 1280 for WMAKE.
  • The 32-bit DOS WD and WPROF can now be used with DOS/4G 2.x. The DOS4GOPTIONS settings are no longer exported. Users may still override the defaults by supplying their own wd.ini and wprof.ini, respectively. These files must be in the appropriate format for the DOS/4G version used. Note that this does not affect DOS/4GW users.
  • WLINK now handles offsets and groups larger than 64 KB for 32 bit code and 16 bit targets.
  • WLINK now ignores fixup displacement when the target relocation is absolute. This is required for compatibility with object files generated by MASM 5.1.
  • WLINK now properly handles the alignment of the last segment in a group if the last segment fragment is blank.
  • WLINK can now use the WLINK_LNK environment variable to override the default directive file name (wlink.lnk). If the specified file isn't found then the default file is used as usual.
  • WLINK now properly emits segments overlaped by groups to output file.
  • WLINK now properly handles imported symbols that are locally defined with the dllimport specifier in PE formatted files.
  • WRC on Far-Eastern NT-based systems now honors the DBCS encoding specified on the command line.
  • The text editor now supports syntax highlighting for resource files.
  • The Fgrep dialog box in graphical editor now has a browse button to display the standard browse for folder dialog box on versions of Windows that support it.
  • The ide2make utility has been added to the Open Watcom distribution. This utility converts IDE project files to make files.
  • The exe2bin utility now performs properly if relocation items are unsorted.
  • The installer now generates a batch file that automatically sets the environment variables used by the Open Watcom tools.

New in Open Watcom 1.7 (Sep 17, 2007)

  • Functions using the __cdecl calling convention now return floating-point values in FPU registers in 32-bit code. This is the correct behaviour compatible with other compilers.
  • The C and C compilers now support an include_alias pragma which can be used, among other things, to map long include filenames onto 8.3 names. In addition, the compilers now support a -na switch to disable the automatic inclusion of _ialias.h (which contains new include_alias pragmas for certain standard headers).
  • The C compiler now emits warnings on operations which mix multi-level pointer types such as void** and int**. Previously a warning was only emitted in ANSI mode. Note that while void** is not assignment compatible with int**, void* is. The new stricter behaviour is in line with most other C compilers and helps users write cleaner and more portable code.
  • The C compiler now warns (W400) when an expression of plain char type is used as array index. Because the sign of plain char changes depending on compiler choice and settings, using plain char as array index is inherently non-portable and likely to cause problems.
  • The C compiler now folds constant expression before checking for range overflows etc. This enables the compiler to diagnose constant out of range issues in more cases.
  • The C compiler now allows benign variable redefinitions where __near or __far modifiers aren't always explicitly specified but match when current data model is taken into account (eg. 'extern int __near x;' and 'extern int x;' in small data models). The new behaviour is compatible with the C compiler as well as with other vendors' compilers.
  • The default stack size for 32-bit DOS extended executables has been increased from 4K to 64K. Note that the linker can still set greater or smaller stack size.
  • The code generator now produces better 16-bit code for 64-bit math operations.
  • The code generator no longer incorrectly optimizes out conditionals. The problem only occurred in very rare situations and probably only when doubles were being compared.
  • A long-standing problem with use of certain 64-bit constants as results of ternary operators has been fixed.
  • The C compilers now has a workaround for bugzilla bug #63 (http://bugzilla.openwatcom.org/show_bug.cgi?id=63). The compiler now generates an error message referring to the bug entry rather than crashing.
  • The LIBC and CLIB thin netware libraries have been added to the distribution as experimental.
  • 32-bit DOS executables now correctly pass environment to child processes started through the spawn family of functions. Previous incorrect behaviour was introduced in version 1.6.
  • In the NetWare libraries, __get_stdout with __get_std_stream was causing an infinite recursion. This has been fixed.
  • Fixed 8087 emulator/mathlib 80-bit real multiplication if one operator is zero and second is a power of two.
  • The _outgtext() function in graph.lib no longer fails on 32-bit targets.
  • The Win32 stat() function now returns correct results when it tries to access a file with given name and the directory containing that file also contained a subdirectory with the same name.
  • The debugger now supports a "No Source" toggle (right mouse click menu) in the assembly code window to switch on/off associated source code.
  • The debugger no longer crashes when tracing F77 programs that use variable-size arrays. This only applies to DWARF debugging information (which is used by default).
  • The debugger now correctly displays multi-dimensional Fortran arrays when DWARF debug information format is used (which is used by default).
  • The debugger can now display (partial) strings in Fortran code when the string length exceeds the debugger's internal limit. The internal limit has also been increased from 512 to 1024 characters.
  • The resource compiler now properly copies non-resident name table when processing LX executables.
  • The console version of vi for Win32 no longer quits after Ctrl Left is pressed followed by any other key.
  • WCL now correctly takes options from the environment when there is more then one file to compile.
  • The linker now supports a MIXED1632 option to allow mixing of 16- and 32-bit logical segments into a single physical segment in OS/2 LX/LE executables.
  • The linker now supports a NOSTUB option for Windows and OS/2 executable formats. This option causes no DOS stub executable to be written to the output image.
  • The installer now allows you to disable creating program groups or modifying the startup environment using the /np and /ns switches.