Watcom C++ & Fortran v. 11.0c (Update for Watcom Fortran, 20/12/2002, SciTech Software) |
Readme/What's new |
WATCOM Fortran 77 Version 11.0c - README
----------------------------------------
Welcome to WATCOM Fortran 77 version 11.0c. This README provides
helpful hints found during testing as well as updated information
that was not available at the time the documentation was produced.
This file includes:
-------------------
Important
Environment variables
11.0 C-level Notes
11.0 B-level Notes
Fixes in versions 11.0 C, B and A-level
Changes in 11.0 that may Require Recompilation
Major Differences from Version 10.6
Other General Notes about version 11.0
===========================================================
Important
===========================================================
Some Watcom tools currently do not function properly if installed in a
directory with spaces in the name e.g. "C:\Program Files\WATCOM".
Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install
the tools in.
===========================================================
Environment variables used by Watcom FORTRAN
===========================================================
For proper operation the Watcom compilers require few environment variables
to be set up correctly. These variables differ slightly depending on the
host platform (DOS, OS/2, Win32). The common variables are:
- PATH - points to directories containing Watcom executables
- WATCOM - points to the directory where Watcom 11.0c is installed and is
used by various Watcom tools to locate files
- EDPATH - points to VI/VIW configuration files
- INCLUDE - points to directories containing C header files used by the
compilers
- FINCLUDE - points to directories containing Fortran header files used by
the compilers
- LIB - points to directories containing library files; note that Watcom
linker is able to locate Watcom runtime libraries without this
variable
DOS specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win16 specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win32 specifics
- PATH - must point to binnt and binw directories, in that order
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
OS/2 specifics
- PATH - must point to binp and binw directories, in that order
- LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the
LIBPATH statement in CONFIG.SYS must point to the binp\dll
subdirectory of Watcom 11.0c in order to let the OS find Watcom
DLLs
- HELP - points to binp\help to let Watcom GUI tools locate online help
files
- BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate
Watcom online manuals
These environment variables can be either set up in your starup files (which
is the most convenient method if Watcom 11.0c is the only compiler you use)
or you can use simple batch files to set these variables (useful if you
need to switch between compilers, including different versions of Watcom
compilers).
Below are several sample batch files for setting the environment variables on
various host platforms. The WATCOM variable must naturally be adjusted
according to where Watcom 11.0c was installed on your system. The LIB
environment variable isn't strictly necessary but you will probably need
to set it for any libraries you use not supplied with Watcom compilers.
Similarly you might need to adjust the INCLUDE variable for 3rd party
library include files.
DOS BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H
SET FINCLUDE=%WATCOM%\SRC\FORTRAN\DOS;%WATCOM%\SRC\FORTRAN
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win16 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN
SET FINCLUDE=%WATCOM%\SRC\FORTRAN\WIN;%WATCOM%\SRC\FORTRAN
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win32 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\NT
SET FINCLUDE=%WATCOM%\SRC\FORTRAN
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
OS/2 CMD file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH%
SET BEGINLIBPATH=%WATCOM%\BINP\DLL
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2
SET FINCLUDE=%WATCOM%\SRC\FORTRAN\OS2;%WATCOM%\SRC\FORTRAN
REM SET LIB=
SET HELP=%WATCOM%\BINP\HELP;%HELP%
SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF%
---------------------------------------------------------------------------
===========================================================
11.0 C-level Notes
===========================================================
All files licensed by Microsoft, IBM, Novell, Tenberry,
Pharlap and Blue Sky Software have been removed in this version.
The Windows SDK components are not included in the 11.0c update.
If you wish to do Windows programming you are required to have a
prior version of Watcom C/C++ 11.0. Watcom Fortran 77 10.6 may
work, but this has not been tested.
The DOS/4GW extender is also not included in the 11.0c update.
If you wish to develop programs using DOS/4GW, you are required
to have a prior copy of Watcom Fortran 77 and use the version of
DOS/4GW that came with your earlier product. Alternatively you can
switch to using the included CauseWay DOS extender which is a drop
in replacement for DOS/4GW (with a few minor differences).
Support for Watcom Fortran 77 11.0c is at www.openwatcom.org
===========================================================
11.0 B-level Notes
===========================================================
The SOM toolkit for OS/2 is no longer supported, and has
been removed in this version.
===========================================================
Fixes in versions 11.0 C, B and A-level
===========================================================
The letter in the first column indicates which level the fix
was first introduced.
********************
** Code Generator **
********************
C Fixed combining two move short constants into one move
dword constant followed by two move byte constants that
combined. The codegen would incorrectly "forget" the
first byte-byte combined move after the short-short
combined move.
Example:
struct S {
unsigned short a,b;
unsigned char c,d,e,f;
};
void foo( S *p ) {
p->a = 1;
p->b = 2;
p->c = 3;
p->d = 4;
p->e = 5;
p->f = 6;
}
===========================================================
C Fixed a problem where 64-int constants were being
aliased to 64-bit floating point constants in such
a way that the values are incorrect.
Example:
struct S {
double d;
__int64 x;
};
void foo( S *p ) {
p->d = 6.25;
p->x = 0; // changes to p->x = 6;
}
===========================================================
B When static member functions are supplied to the ?: operator, no
code was being generated
===========================================================
B added a compiler switch to disable the "common epilogue"
optimization.
===========================================================
A If optimizing for time, align procedures on 16-byte
boundaries for anything above a 486.
===========================================================
A Fixed a problem with short-circuit operators in which
a side effect would be discarded (ie ( (a=b) || 1 )
would get reduced to (1) and the (a=b) discarded. Ditto
for ( (a=b) && 0 ).
===========================================================
A Fixed a problem with long filenames in object file
generation.
===========================================================
A Fixed a problem with loopopts and far pointers - if
inductions optimizations introduced an add of an integer
to a far pointer, it was possible that the add would be
generated incorrectly, resulting in some highly suspicious
references to odd locations such as -1[bp] or 7[bp].
===========================================================
A Fixed a problem in which conversions between floats and
ints (or floats and doubles) within a union might not
be generated correctly.
===========================================================
***************
** C Library **
***************
C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS,
__U8FS, __I8FD, __U8FD, used to convert between float, double
and signed __int64, unsigned __int64 for alternate maths
libraries were
- missing for 32-bit C libraries
- converted incorrectly for 16-bit C libraries
This is now fixed
===========================================================
C Fixed sys_nerr so that it was the right value
===========================================================
C Internal routine __GETDS has been added to the 32-bit OS/2 C
libraries
===========================================================
C Internal functions __U8FD7 and __U8FS7 have been made smaller
and faster. These routines are used to convert unsigned __int64
to double and single respectively.
Internal function __I4D is now faster under some circumstances
===========================================================
C Fixed scanf() family where the wrong count would be obtained
for floating-point input. e.g:
int charcnt;
double data;
sscanf( "123." , "%lg%n", &data, &charcnt );
Fixed scanf() family so that the negative sign is handled
when reading unsigned integers (a requirement of ANSI C)
===========================================================
C Fixed _fullpath() where under certain circumstances the heap
could be corrupted
===========================================================
C Fixed memory leak in tmpfile() for Netware libraries
===========================================================
C _searchenv() now works for quoted paths including 4NT-style
paths
===========================================================
C Fixed problem in memory allocator that could cause NULL
to be returned without going to the system to get more
memory.
===========================================================
C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as
Jun 1, 2101. Affected ctime, localtime, gmtime.
===========================================================
C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386.
Previous version did not work at all for a number of reasons.
New version is accurate to within +/- 1/100 second.
===========================================================
C Fixed bug in printf formatting. %#.6g would not display trailing
zeros for a number like 1.0e6. Output was 1.e+006 when it should
have been 1.00000e+006. Fix was made to _ldcvt().
===========================================================
C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(),
and setmode() in Netware library by removing a failing file handle
check.
===========================================================
C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079
resulted in truncation due to 16-bit rather than 32-bit precision.
Changed 365 to 365L to force 32-bit calculation.
===========================================================
C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is
called early on in exit() rather than in _exit() (since run-time
system is shut-down by the time _exit gets called).
This bug impacted "Save as" in default windowing support.
===========================================================
C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in
clearenv at program exit.
===========================================================
C Fixed opendir() for DBCS environments (where backslash, slash,
asterisk and question mark might appear as the second character
of a double-byte character in a path specification). We now use
_mbsinc() and _mbsnextc() to scan a path string.
===========================================================
C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit
Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously,
only Win32 was supported.
===========================================================
C Fixed a problem with multi-threaded applications where a thread
was very short-lived.
A multi-threaded application would crash when a thread was very
short-lived. The problem seemed to appear with more frequency on the
newer generation of fast processors. The crash occurred in
_CBeginThread which is the C run-time implementation of
_beginthread.
A workaround was to delay the thread from exiting using some sort of
gating technique like Sleep or a signal from the creating process
that permitted the thread to exit.
A more detailed description of the problem follows.
When a thread is created, a thread handle is returned to the process
doing the CreateThread. Our run-time library wants to pass this
thread handle to the newly "executing" thread so that when the
thread exits, the thread can free the handle itself.
The "main" process passes the thread handle to the thread by storing
it at a location provided by the thread. This location is "created"
by the thread so the main process waits for an event that signals
that the location is created. But here's what happens. The thread
signals the event and keeps on executing. In fact, it executes right
through to the termination code and exits before the main process is
dispatched again. Eventually the main process is resumed (since the
event that it waited on has occured) and then it stores the handle
into memory. This memory however no longer exists because the thread
has already come and gone. An access violation occurs.
The problem was fixed by adding code to complete the handshaking
process (the problem had been already half solved). The thread now
waits for the creating process to provide the handle.
===========================================================
C spawn... functions with P_NOWAIT under Win32 no longer allocate an
extra process handle.
===========================================================
C Simplefied Win32 version of _pipe. Pipes are inheritable if you use
the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode
attribute.
===========================================================
C Fixed the multi-byte character functions so that they work
correctly for all double-byte character sets (not just Japanese). The
revised functions are:
_mbctolower
_mbctoupper
_ismbcalnum
_ismbcalpha
_ismbccntrl
_ismbcdigit
_ismbcgraph
_ismbclegal
_ismbclower
_ismbcprint
_ismbcpunct
_ismbcspace
_ismbcsymbol
_ismbcupper
_ismbcxdigit
_mbslwr, _fmbslwr
_mbsupr, _fmbsupr
===========================================================
C Fixed Win32 version of _dos_findfirst/_dos_findnext so that
_A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly.
===========================================================
C Fixed Netware version of library so that code-gen support routines
like __i8d are not exported. This removes the problem caused when
2 or more NLMs ended up exporting the code-gen support routines.
===========================================================
C Removed assert from low-level thread data pointer acquisition
routine (since assert requires a thread data pointer in multi-
threaded applications so it was no good to use assert to complain
that a thread data pointer could not be acquired). Normally,
this problem would not be seen.
===========================================================
C Added some error checking to Win32 cprintf and putch (conio) routines.
===========================================================
C _controlfp called _controlfp rather than _control87 resulting in a
recursive, infinite loop. Changed _controlfp to call _control87.
===========================================================
C Fixed a number of I/O routines to make them thread safe. Included are
the Netware version of fopen, _fsopen, all versions of tmpnam, all
versions of fclose.
===========================================================
C Fixed tzset() for Windows NT/2000 in areas where there is no daylight
savings time. As a result, gmtime() should now be correct for all
areas of the world.
===========================================================
C Fixed the Win32 version of _dos_xxx functions so that they return the
OS error code like their DOS and OS/2 counterparts.
Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value.
Set errno if drive doesn't exist.
Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a
proper errno value.
Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that
they set a proper errno value. Under Win32, they now return a proper
OS error code.
Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(),
_sopen() and __wsopen() so that it first checks to see if it can
store the file handle returned by Win32 before attempting to open
the file. This fix corrects the "orphaned file" problem caused by
opening, then closing a file when the file handle can't be stored.
Fixed the OS/2 spawn routines so that a proper errno value is set
when running out of memory.
Fixed tmpfile() multi-threading problems including infinite loops
when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.)
points to a non-existent path.
Added _strerror() for MS compatibility. Also added wide char version
_wcserror().
Added _doserror() to return Win32 system error message for a
_doserrno value.
Improved mapping of Win32 error codes to errno values.
===========================================================
C Fixed a memory leak in run-time code. Added call to free the
"initial thread data storage" (the storage used by the main
thread in a single-threaded or multi-threaded application).
Affects Win32 and 32-bit OS/2 applications.
===========================================================
C Fixed a problem with tmpnam() in the Netware library in version
11.0c. New names were not being created.
===========================================================
C Fixed bug in Win32 write(). The zeropad function was not necessary
and didn't handle large files, in any case. Now you can seek to a
position > MAX_INT and then write().
===========================================================
C Fixed a problem where _beginthread example was crashing sometimes
===========================================================
C Fixed _chain_intr() so that flags is passed to interrupt handler
===========================================================
C Fixed 32-bit strcmp() so comparing unaligned strings does not fault
===========================================================
B Fixed a bug where an app was doing a chmod() on a file in a
directory and is supposed to remove the file and then delete
the directory itself. Under Win95 the directory was getting
removed, however under NT it was not.
Use div in place of ldiv for 32-bit code, since they should be
the same.
Marked the Product Version as 11.0b for the RTL DLLs, such
as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL,
MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL,
so it is less difficult to distinguish them from older DLLs.
===========================================================
B Fixed a bug where Win386 DLLs would GPF every second time they
are unloaded.
To reproduce this,
modify the samples in samples\fortran\win\dll by adding the line
"call FreeLibrary( hlib )" before the line "FWinMain = 0" in
gen*.for. When you run the samples, they GPF the first, third,
fifth, etc. times when FreeLibrary is called. If you compile/link
these modified samples with 10.6a or earlier versions, then the
problem doc not occur. Reproduce this behaviour under WFW 3.11
and Win NT 4.0. Customer has reproed this under Win 95, and also
reproed it when the DLLs are called from VB 4.0.
===========================================================
B _wtof was missing from the 16-bit math libaries,
and the 32-bit version was returning erroneous results.
===========================================================
B Target: Win32: Using fmod() or modf() in code compiled with /br
was giving undefined references.
===========================================================
B Fixed a bug with itoa() in win16 apps, where you couldn't run
multiple instances of the app. If you tried to, you got
"Cannot start more than one copy of the specified program" under
NT and "Error: Cannot <something> multiple writeable data
segments" under Win 3.x.
===========================================================
B Win32 target only: feof() was not set when end-of-file occurs
on an input pipe. ferror() was being set instead.
===========================================================
B ftime() was not reporting correct timezone field in timeb struct
when TZ is negative.
===========================================================
B Overflow range error in pow was not reported unless /fpc used.
===========================================================
A _findfirst() has been changed to take a const char * instead of
just a char *.
===========================================================
A __FSU87 was trashing ecx - this routine is called to convert an
unsigned __int64 to a float.
===========================================================
A Fixed memory leak, due to us not deallocating the _iomode array
during fini rtns. Also added _UnloadCLib call to library to
allow user to properly unload 16 bit OS/2 user loadable DLLs.
===========================================================
A Fixed a bug where fortran default windowing apps would sometimes
appear to print lines twice, when printing at the bottom of the
screen. Since they were being printed at the bottom of the window
and then not erased when the window scrolled up, leaving a 2nd
copy at the bottom
===========================================================
A Input value range checking for strtod() has been improved for very
small values.
===========================================================
A The runtime dll support has been fixed to no longer leave a
potentially dangerous reference from the C runtime DLL into
whichever DLL has been most recently loaded into the process
image. The reference from the C runtime DLL now points
directly into the Math runtime DLL.
===========================================================
A The _dos_getdiskfree() function for 32bit platforms now has an
expanded data structure.
===========================================================
The assert() function for WIN32 and OS/2 platforms will attempt
to use stderr for output if it is available.
===========================================================
A The __declspec(thread) support for WIN32 platforms has been
improved. In some, pathological cases, it could lead to a GPF
on program startup.
===========================================================
A The system() function for WIN32 platform no longer passes
posix file handles for inheritance by child processes by default.
===========================================================
A The delay() function for NEC98 machines used to hang on
initialization.
===========================================================
A The race condition in the _beginthread() function related
to the saving of the child thread handle has been fixed.
===========================================================
A The multibyte init code for the C runtime library would
always crash on startup when running under the Pharlap
Run386 or TNT DOS extenders.
===========================================================
A The heapchk() function for 32bit platforms could, in some
cases, enter an infinite loop.
===========================================================
A The posix level open() function for WIN32 platforms did not
properly truncate existing files on NT server machines when
run from an NT workstation.
===========================================================
A The WIN32 stat() function now ensures that directories
cannot be marked as character mode devices.
===========================================================
A The WIN32 and OS/2 runtime shutdown code now does a better
job of releasing all resources on image shutdown.
===========================================================
******************
** Disassembler **
******************
C Fixed WDIS so that it correctly disassembles 32-bit code
assembled with MASM/TASM as 32-bit and no longer as 16-bit
===========================================================
C Fixed ORL library so that additional OMF THEADR records in
object files are not diagnosed in error. Additional THEADR
records occur when #include'ing source code and requesting
Codeview debug info.
===========================================================
B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL"
and a few other instructions.
===========================================================
B Wdis did not give the correct code when disassembling memchr().
It placed the label in the wrong position.
This is because the code makes a jump into the
middle of an opcode sequence depending on the result of memchr().
WDISASM with 10.6 "knew" about this and issued DB instructions.
===========================================================
A fixed problem with disassembly of 3-operand imul instructions
(only 2 operands were displayed)
===========================================================
*******************
** Documentation **
*******************
C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK()
are now documented
===========================================================
C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented
===========================================================
C #pragma read_only_file which appears in nearly all Watcom header
files is now documented.
The default depth for #pragma inline_recursion has been corrected.
The default depth is 3.
===========================================================
C Functions
_dieeetomsbin(),
_dmsbintoieee(),
_fieeetomsbin(),
_fmsbintoieee(),
_findfirsti64(),
_findnexti64(),
_wfindfirsti64(),
_wfindnexti64(),
_filelengthi64(),
_lseeki64(),
_telli64(),
_fstati64(),
_wfstati64(),
_stati64(),
_wstati64()
are now documented in the C library.
===========================================================
B Fixed the C library matherr example, so it works with the C++
compiler.
===========================================================
B Watcom 10.6 aligns structure members on a byte boundary by
default.
Watcom 11.0 aligns structure members on an 8 byte boundary
by default.
Fixed some places where the documentation hadn't been updated
from 10.6.
===========================================================
B Added - wlink's OPTION SHOWDEAD, which was not documented.
This option is very useful as it shows in the map file which
functions the linker stripped out.
===========================================================
B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+.
===========================================================
B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs.
The dllsamp.c file was missing a: define EXTERNC.
===========================================================
B Upated Linker docs indicate that incremental linking is not
supported for 16-bit DOS and NetWare targets.
===========================================================
*************************
** FORTRAN 77 Compiler **
*************************
C Internal compiler error 3 occured for program
CALL EXCDPS(,WHC,PROPAR,K1,PDT)
END
Now diagnostics
*ERR* PC-01 column 19, missing or misplaced closing parenthesis
*ERR* SX-14 column 19, missing operator
are issued
===========================================================
B write(*.*) (notice the period instead of a comma)
was not being caught as a syntax error.
===========================================================
A fixed a bug where the compiler would produce an access violation
error if you passed an external as an argument to a subroutine
the error would only occur if debug info was on ( -d2 )
===========================================================
************************
** FORTRAN 77 Library **
************************
C Fixed a bug in multi-threading that arose when we moved from a
four parameter to three parameter version of _beginthread
under Win32.
===========================================================
C Fixed a bug in the FGETCMD library function. It used to allocate
a temporary fixed-size (128 bytes) buffer on the stack and get a
copy of the command line into it using the C library getcmd()
function. When the command line exceeded 128 bytes, the stack
was clobbered. We rewrote FGETCMD to use _bgetcmd() (a bounded
version of getcmd()). Note that the size of the command line
returned by FGETCMD is always the length of the command line
and can exceed the maximum size of the character argument (but
we'll never copy more than will fit into the character argument).
===========================================================
**********************
** Graphics Library **
**********************
C Fixed a bug where vector fonts where being drawn incorrectly
===========================================================
C Now cache the SVGA Page for better performance
===========================================================
C Fixed a bug in NEC version of graphics library "SetPixel" function.
===========================================================
C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have
been turned on. On most adapters, this didn't cause a problem.
On a Number Nine video card, this showed up as a problem in flood
filling an area.
===========================================================
********************
** C Header Files **
********************
C Fixed headers <typeinfo.h>, <exceptio.h> so that they include
other Watcom C++ headers with the .h extension correctly. This was
causing STLPort's headers to be used in preference to Watcom's.
===========================================================
C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two
places. Old version resulted in a loss of an attempted
optimization. The correction will result in better performance
for getc().
===========================================================
C Added Microsoft's FLT_NORMALIZE constant.
Added Microsoft's _DBL_RADIX constant.
Added Microsoft's _DBL_ROUNDS constant.
Added Microsoft's _LDBL_RADIX constant.
Added Microsoft's _LDBL_ROUNDS constant.
Added Microsoft's DBL_RADIX constant.
Added Microsoft's DBL_ROUNDS constant.
Added Microsoft's LDBL_RADIX constant.
Added Microsoft's LDBL_ROUNDS constant.
Changed FLT_MIN_EXP from (-127) to (-125).
Changed DBL_MIN_EXP from (-1023) to (-1021).
Changed LDBL_MIN_EXP from (-1023) to (-1021).
Changed FLT_MIN_10_EXP from (-38) to (-37).
Changed FLT_MAX_EXP from 127 to 128.
Changed DBL_MAX_EXP from 1023 to 1024.
Changed LDBL_MAX_EXP from 1023 to 1024.
Added accurate representations for DBL_MAX, DBL_EPSILON and
DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN.
===========================================================
C Improved code generated from isxxx() functions.
Changed description of messages associated with some errno values.
Added definition of NULL to float.h.
Added prototypes for _strerror(), _wcserror(), _doserror(),
_wdoserror() to string.h.
===========================================================
A const qualifiers have been added to the char* parameters
to the findfirst and variant functions in io.h
===========================================================
A The register mode calling convention prototype for longjmp()
is no longer marked as "#pragma aborts" to facilitate
profiling support.
===========================================================
**********************************************
** Integrated Development Environment (IDE) **
**********************************************
C Fixed incorrect access of C error/warning help file
WCCERRS.HLP (messages were one out)
===========================================================
A Added pentium pro (p6) switches to the options pages
( compiler, linker, assembler, etc. )
===========================================================
A added a switch for Watcom debugging info to the linker
options page - watcom was previously the default if you
selected debug all, now Dwarf is the default
===========================================================
A fixed a resource problem that was causing some of the
buttons and menu items to appear with no text
===========================================================
A Don't use incremental linking for DOS or Netware
applications - it is not supported
===========================================================
A Changed the compiler options for Netware targets to use
-5s, -ms -- stack based, small model
===========================================================
A changed the linker options for 32-bit OS/2 DLL's
now uses op manyautodata, initinstance, terminstance
===========================================================
***************
** Librarian **
***************
C Updated command line help for WLIB /?
Help added for switches -p, -s, -v
===========================================================
C Wlib overwrote an existing object file with no truncation (in the
"*" extract operation). This resulted in a corrupt object file
when the new one was shorter than the old one.
===========================================================
C Fixed some problems related to creating AR format libraries
using the -fa switch.
===========================================================
B Wlib wasn't giving a warning message if you tried to extract
a nonexistent object file.
===========================================================
************
** Linker **
************
C Fixed problem where WLINK was inserting random text
(often parts of WLSYSTEM.LNK) in the final executable
===========================================================
C Fixed WLINK so that it now works interactively again
===========================================================
C Added support for case-insensitive searching of COFF (AR-format)
libraries. For example, the linker now matches _SLEEP@4 with
_Sleep@4 in KERNEL32.LIB.
===========================================================
B Fixed output of QNX executables for a rare case of
internal buffer filling.
===========================================================
B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare,
in 11.0 you didn't get an error to indicate this
===========================================================
B fixed a bug where
"wlink debug watcom types" or
"wlink debug watcom locals" or
"wlink debug watcom lines"
would all cause the linker to crash
"wlink debug watcom all" was fine
===========================================================
B NT linker was crashing if you ran it with no arguments, and
typed something at the WLINK> prompt
===========================================================
B fixed a bug where WLINK was crashing while trying to link an app
with codeview debuggin info
===========================================================
**********
** Make **
**********
A In non-Microsoft mode, WMAKE will find and process
a file named "MAKEFINI" after all makefiles have been
processed.
===========================================================
***********************
** Resource Compiler **
***********************
C Added support for CodePage 1250 to UNICODE translation (1250.UNI).
===========================================================
**************
** Debugger **
**************
B dwarf dip now exits gracefully if it failes to load debug info
===========================================================
B Fixed a bug on DOS or Win95 Host:
binw\wd was crashing on loading DOS/4GW EXE.
The debugger was running out of memory trying to read in a large app
or large app + symbolic debugging info (.SYM) file.
Problem did not occur with the binnt debuggers under NT.
===========================================================
B binw\wd was crashing when inspecting ofstream structure with
Watcom or Codeview debugging information.
===========================================================
B Debugger was crashing when double-clicking on an entry in calls window.
===========================================================
B If winserv terminated abnormally for any reason, you could not
restart it unless you gave the server a different name. This is a
bigger problem than appears at first, because the IDE uses an
unnamed debug server. As such, if you were debugging DOS/4GW
under Windows 95 and the application crashed the server, then you
had to reboot before you can debug in the IDE to start the debugger
again. Winserv will now free the name and try again if it tries
to connect to a server and is unable to connect.
===========================================================
A Rolled back DOS4G extender to 1.96 to fix pharlap application
debugging crashes.
===========================================================
A fixed a bug where you couldn't debug "Large" DOS/4GW apps
===========================================================
***************
** Assembler **
***************
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
C Fixed message numbers so that they increase sequentially from 1
and from 500 in each of the two groups of messages. Previously,
message numbers had large gaps in them.
===========================================================
B Fixed a bug where wasm wouldn't assemble:
"psrlq m1, dummy"
where dummy is a quadword
It gave an error: "Second operand too big".
===========================================================
*********************
** Watcom Profiler **
*********************
C Fixed "Out of Memory" error when sample file has no samples.
Fixed disassembly error in display of location counter (eip/ip).
===========================================================
*********************
**** Clone Tools ****
*********************
C Fixed CL & CL386 so that switches -MD or -MDd are translated as
the equivalent Watcom switch -br. Previously no translation
was occuring. For the real Microsoft tools, the switches means
using the Run-Time Libraries in DLL form. Correcting this means
the equivalent Watcom Run-Time Libraries in DLL form will be used.
===========================================================
Changes in 11.0 that may Require Recompilation:
-----------------------------------------------
clock()
The clock function accuracy has changed from 100 ticks per second to
1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code
that uses the clock function and CLOCKS_PER_SEC in its calculations
must be recompiled before linking the application with new libraries.
Major Differences from Version 10.6:
------------------------------------
The following sections summarize the major differences from the
previous release of Watcom C/C++.
In general, we have improved Microsoft compatibility in our compilers
(more warnings instead of errors, support for MS extensions, etc.)
and tools. Some of the Win32 and 32-bit OS/2 versions of our tools
are now available in DLL form.
EXE DLL Description
------ ------- -----------------------
wcc wccd 16-bit x86 C compiler
wcc386 wccd386 32-bit x86 C compiler
wpp wppdi86 16-bit x86 C++ compiler
wpp386 wppd386 32-bit x86 C++ compiler
wlink wlink Watcom Linker
wlib wlibd Watcom Library Manager
This provides better performance when using the Integrated Development
Environment or Watcom Make. See the description of the !loaddll
preprocessing directive in Watcom Make for more information.
Changes to the C++ Compiler for 11.0
------------------------------------
We have added support for namespaces and RTTI (Run-Time Type
Identification).
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the C Compiler for 11.0
----------------------------------
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Code Generator for 11.0
--------------------------------------
A new optimization, "branch prediction", has been added. This
optimization is enabled by the "ob" or "ox" compiler options.
The code generator tries to increase the density of cache use by
predicting branches based upon heuristics (this optimization is
especially important for Intel's Pentium Pro). We have added
Multi-media Extensions (MMX) support to the in-line assemblers.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Compiler Tools for 11.0
--------------------------------------
The Watcom Linker supports incremental linking.
The Watcom Library Manager (WLIB) can now understand COFF and ELF
format object files, as well as OMF et al. The Watcom Library
Manager can now read/write AR-format (Microsoft compatible),
Multilib (used by IBM for PowerPC version of OS/2), or old-style
OMF libraries. The default output format is AR-format and this can
be changed by switches. The Watcom Library Manager can output various
format import libraries.
We have added Multi-media Extensions (MMX) support to the Watcom
Assembler (WASM). A new version of the Watcom Disassembler (WDIS)
is included. It can process ELF, COFF or OMF object files and ELF,
COFF or PE format (Win32) executables.
The old disassembler (WDISASM) has been retired and is not included
in the package.
We have added new tool front-ends that emulate Microsoft tools.
These are:
nmake
cl
link
lib
rc
cvtres
mapsym
These programs take the usual Microsoft arguments and translate them,
where possible, into equivalent Watcom arguments and spawn the
equivalent Watcom tools.
Watcom Make now processes Microsoft format makefiles when the "ms"
option is used.
Changes to the C/C++ Libraries for 11.0
---------------------------------------
We have added multi-byte and wide character (including UNICODE)
support to the libraries.
We include run-time DLLs for the C, Math and C++ Libraries.
We have added Multi-media Extensions (MMX) support to the libraries.
The following new functions were added to the library...
mb functions
The clock function accuracy has changed from 100 ticks per second
to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed).
Changes to the DOS Graphics Library for 11.0
--------------------------------------------
The graphics library now performs the VESA test before testing for
vendor specific graphics cards. This fix is intended to broaden
the number of graphics cards that are supported.
For details on what was new in versions 10.6 and earlier, see the
GETTING STARTED helpfile.
Other notes:
Note: %DstDir% represents the directory in which WATCOM C/C++ was installed.
%WinSysDir% represents your Windows 3.x system directory.
1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure
that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your
path. Failure to do so, may cause your computer to hang.
2. When using the GUI debugger to debug Windows 3.x applications, certain
Windows applications may cause the debugger to behave in an unpredictable
way. Typically, this occurs when debugging certain messages in window
callback functions. For example, hitting a breakpoint in a window
function that is processing a WM_INITDIALOG message will crash the system.
If this happens, the character-mode version of the debugger should be
used.
3. In order to use CodeWright with our IDE, you will need to change the
"cwright.ini" file. This file contains the following line.
;LibPreload=cwdde.dll
Uncomment this line by removing the ';' character. This is required to
enable communication between the IDE and CodeWright when "weditcw.dll"
is selected as the editor interface DLL from the IDE.
4. If you choose to not install help files onto your hard disk, you will not
be able to get help on the C library or MFC library from the editor.
5. Parallel remote debug servers now work in an OS/2 session.
6. When configuring the browser to use the CodeWright editor interface, you
must specify "weditcw.dll" as the editor DLL, save the new options, exit
the browser, and restart the browser. Failure to do this will cause an
exception to occur in the CodeWright interface DLL.
7. Under OS/2, if you are debugging a DOS application from the IDE, you
must ensure that %DstDir%\binw is in your DOS path so that when the IDE
starts a DOS session to debug your application, the remote server can find
its support files.
8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is
disabled if you want to debug PM applications. By default, this setting
is disabled.
10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the
directory which contains RC.EXE occurs too late in your PATH environment
variable ( > 250 characters ). If you experience problems with RC.EXE,
you should change the PATH environment variable in your CONFIG.SYS file,
by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path. |
Watcom C/C++ v. 11.0c (Update for Watcom C/C++, 20/12/2002, SciTech Software) |
Readme/What's new |
WATCOM C/C++ Version 11.0c - README
-----------------------------------
Welcome to WATCOM C/C++ version 11.0c. This README provides helpful
hints found during testing as well as updated information that was
not available at the time the documentation was produced.
This file includes:
-------------------
Important
Environment variables
11.0 C-level Notes
11.0 B-level Notes
Fixes in versions 11.0 C, B and A-level
Changes in 11.0 that may Require Recompilation
Major Differences from Version 10.6
Other General Notes about version 11.0
===========================================================
Important
===========================================================
Some Watcom tools currently do not function properly if installed in a
directory with spaces in the name e.g. "C:\Program Files\WATCOM".
Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install
the tools in.
===========================================================
Environment variables used by Watcom C/C++
===========================================================
For proper operation the Watcom compilers require few environment variables
to be set up correctly. These variables differ slightly depending on the
host platform (DOS, OS/2, Win32). The common variables are:
- PATH - points to directories containing Watcom executables
- WATCOM - points to the directory where Watcom 11.0c is installed and is
used by various Watcom tools to locate files
- EDPATH - points to VI/VIW configuration files
- INCLUDE - points to directories containing header files is used by the
compilers
- LIB - points to directories containing library files; note that Watcom
linker is able to locate Watcom runtime libraries without this
variable
- WWINHELP - points to the directory on the CDROM drive where help files are
located. This may minimize hard disk space
DOS specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win16 specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win32 specifics
- PATH - must point to binnt and binw directories, in that order
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
OS/2 specifics
- PATH - must point to binp and binw directories, in that order
- LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the
LIBPATH statement in CONFIG.SYS must point to the binp\dll
subdirectory of Watcom 11.0c in order to let the OS find Watcom
DLLs
- HELP - points to binp\help to let Watcom GUI tools locate online help
files
- BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate
Watcom online manuals
These environment variables can be either set up in your starup files (which
is the most convenient method if Watcom 11.0c is the only compiler you use)
or you can use simple batch files to set these variables (useful if you
need to switch between compilers, including different versions of Watcom
compilers).
Below are several sample batch files for setting the environment variables on
various host platforms. The WATCOM variable must naturally be adjusted
according to where Watcom 11.0c was installed on your system. The LIB
environment variable isn't strictly necessary but you will probably need
to set it for any libraries you use not supplied with Watcom compilers.
Similarly you might need to adjust the INCLUDE variable for 3rd party
library include files.
DOS BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win16 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win32 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\MFC\INCLUDE;%WATCOM%\H\NT
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
OS/2 CMD file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH%
SET BEGINLIBPATH=%WATCOM%\BINP\DLL
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2
REM SET LIB=
SET HELP=%WATCOM%\BINP\HELP;%HELP%
SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF%
---------------------------------------------------------------------------
===========================================================
11.0 C-level Notes
===========================================================
All files licensed by Microsoft, IBM, Novell, Tenberry,
Pharlap and Blue Sky Software have been removed in this version.
The Windows SDK components and Microsoft Foundation Classes are
not included in the 11.0c update. If you wish to do Windows
programming you are required to have a prior version of Watcom
C/C++ 11.0, especially for MFC support. Watcom C/C++ 10.6 may
work, but this has not been tested.
The DOS/4GW extender is also not included in the 11.0c update.
If you wish to develop programs using DOS/4GW, you are required
to have a prior copy of Watcom C/C++ and use the version of
DOS/4GW that came with your earlier product. Alternatively you can
switch to using the included CauseWay DOS extender which is a drop
in replacement for DOS/4GW (with a few minor differences).
Support for Watcom C/C++ 11.0c is at www.openwatcom.org
===========================================================
11.0 B-level Notes
===========================================================
The SOM toolkit for OS/2 is no longer supported, and has
been removed in this version.
===========================================================
Fixes in versions 11.0 C, B and A-level
===========================================================
The letter in the first column indicates which level the fix
was first introduced.
===========================================================
****************
** C Compiler **
****************
C New warnings 1178-1181 were being counted in the warnings total
yet confusingly were reported as errors in diagnostic messages.
This has been fixed. These warnings are
W1178: Type qualifier mismatch
W1179: Parameter %N, type qualifier mismatch
W1180: Sign specifier mismatch
W1181: Parameter %N, sign specifier mismatch
===========================================================
C The 16-bit compiler now chooses the right default C library
when generating 16-bit OS/2 multithreaded DLLs. Now
Selecting -bm -bd, generates a reference to CLIBDLL.LIB.
Selecting -bd, generates a reference to CLIBDLL.LIB.
Selecting -bm, generates a reference to CLIBMTL.LIB.
===========================================================
C #pragma enum minimum now works as according to
documentation.
A workaround for 11.0, 11.0a & 11.0b is to use
#pragma enum optimize
===========================================================
C Compiler now accepts extended macros when command line
switch -d+ is specified
===========================================================
C Fixed compiler so that expression
unsigned char uc;
int i;
i = !(unsigned char)uc;
is correct
===========================================================
C structs not getting proper alignment for bitfields at the end of
structs inside structs
===========================================================
C blowup if a syntax error happend in a switch expr
===========================================================
C some warnings coming out with error on message
===========================================================
C #pragma disable_message was allowing errors to be muted as well
casuing trouble for code generation.
===========================================================
C Fixed in-line assembly problem with 486/586 instructions when the
/6 compiler option was specified.
===========================================================
C Fixed WCL/WCL386 bug that shows up when you use "/fe=foo.exe /fm".
The map file was named "FOO.EXE" which caused bizarre executables
to be created.
===========================================================
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
B casting not getting flags like volatile correctly on pointers
casting of unlike pointers not getting done
__i64 numeric literals getting signed extended if number could
fit in 32 bits
-v option putting const/volatile on wrong side of a pointer
===========================================================
B added a warning when trigraphs as used
===========================================================
B _asm sometimes causing lookup problems if followed by an id on
the next C statement
===========================================================
B typedef function names not getting correct return type noticed
when returning double
===========================================================
B added warning for #if #endif pairs that come from different files
===========================================================
B -zpw giving error instead of a warning
===========================================================
B exceptions when getting a syntax error inside sizof operator
===========================================================
B fixed looping bug in error recovery of declarations
===========================================================
B constant folding of (int)((struct *)0+1) always returning 0
===========================================================
B const ? struct : struct causes compiler error
===========================================================
B fixed a bug where typedef double (fortran_tc)(void) wasn't working
as it did in 10.6.
===========================================================
B fixed a bug where using a typedef'ed function prototype no longer
worked in 11.0 if the function prototype and its definition are
in separate files
===========================================================
B wcc/wcc386 would crashes on the line #if ! after reporting:
Error! E1063: Missing operand and then crashes,
while wcc/wcc386 -p also crashes but does not report the error.
===========================================================
B A single-line _asm statement without braces that refers to a
variable would generate an error message. wpp/wpp386 compilers
handle this sample correctly
===========================================================
A fixed folding bug with static intialization
#line comming out after latline in include file at times
allowing macro expansion of #define 1230e+A2 where A2 is a macro
indirect functions call of non default call types ie. stdcall
not working
.obj files sometime being created if error occurred in compile
incorrect calls somtimes being made with functions that have
unspecified parm definitions
===========================================================
********************
** Code Generator **
********************
C Fixed combining two move short constants into one move
dword constant followed by two move byte constants that
combined. The codegen would incorrectly "forget" the
first byte-byte combined move after the short-short
combined move.
Example:
struct S {
unsigned short a,b;
unsigned char c,d,e,f;
};
void foo( S *p ) {
p->a = 1;
p->b = 2;
p->c = 3;
p->d = 4;
p->e = 5;
p->f = 6;
}
===========================================================
C Fixed a problem where 64-int constants were being
aliased to 64-bit floating point constants in such
a way that the values are incorrect.
Example:
struct S {
double d;
__int64 x;
};
void foo( S *p ) {
p->d = 6.25;
p->x = 0; // changes to p->x = 6;
}
===========================================================
B When static member functions are supplied to the ?: operator, no
code was being generated
===========================================================
B added a compiler switch to disable the "common epilogue"
optimization.
===========================================================
A If optimizing for time, align procedures on 16-byte
boundaries for anything above a 486.
===========================================================
A Fixed a problem with short-circuit operators in which
a side effect would be discarded (ie ( (a=b) || 1 )
would get reduced to (1) and the (a=b) discarded. Ditto
for ( (a=b) && 0 ).
===========================================================
A Fixed a problem with long filenames in object file
generation.
===========================================================
A Fixed a problem with loopopts and far pointers - if
inductions optimizations introduced an add of an integer
to a far pointer, it was possible that the add would be
generated incorrectly, resulting in some highly suspicious
references to odd locations such as -1[bp] or 7[bp].
===========================================================
A Fixed a problem in which conversions between floats and
ints (or floats and doubles) within a union might not
be generated correctly.
===========================================================
***************
** C Library **
***************
C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS,
__U8FS, __I8FD, __U8FD, used to convert between float, double
and signed __int64, unsigned __int64 for alternate maths
libraries were
- missing for 32-bit C libraries
- converted incorrectly for 16-bit C libraries
This is now fixed
===========================================================
C Fixed sys_nerr so that it was the right value
===========================================================
C Internal routine __GETDS has been added to the 32-bit OS/2 C
libraries
===========================================================
C Internal functions __U8FD7 and __U8FS7 have been made smaller
and faster. These routines are used to convert unsigned __int64
to double and single respectively.
Internal function __I4D is now faster under some circumstances
===========================================================
C Fixed scanf() family where the wrong count would be obtained
for floating-point input. e.g:
int charcnt;
double data;
sscanf( "123." , "%lg%n", &data, &charcnt );
Fixed scanf() family so that the negative sign is handled
when reading unsigned integers (a requirement of ANSI C)
===========================================================
C Fixed _fullpath() where under certain circumstances the heap
could be corrupted
===========================================================
C Fixed memory leak in tmpfile() for Netware libraries
===========================================================
C _searchenv() now works for quoted paths including 4NT-style
paths
===========================================================
C Fixed problem in memory allocator that could cause NULL
to be returned without going to the system to get more
memory.
===========================================================
C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as
Jun 1, 2101. Affected ctime, localtime, gmtime.
===========================================================
C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386.
Previous version did not work at all for a number of reasons.
New version is accurate to within +/- 1/100 second.
===========================================================
C Fixed bug in printf formatting. %#.6g would not display trailing
zeros for a number like 1.0e6. Output was 1.e+006 when it should
have been 1.00000e+006. Fix was made to _ldcvt().
===========================================================
C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(),
and setmode() in Netware library by removing a failing file handle
check.
===========================================================
C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079
resulted in truncation due to 16-bit rather than 32-bit precision.
Changed 365 to 365L to force 32-bit calculation.
===========================================================
C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is
called early on in exit() rather than in _exit() (since run-time
system is shut-down by the time _exit gets called).
This bug impacted "Save as" in default windowing support.
===========================================================
C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in
clearenv at program exit.
===========================================================
C Fixed opendir() for DBCS environments (where backslash, slash,
asterisk and question mark might appear as the second character
of a double-byte character in a path specification). We now use
_mbsinc() and _mbsnextc() to scan a path string.
===========================================================
C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit
Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously,
only Win32 was supported.
===========================================================
C Fixed a problem with multi-threaded applications where a thread
was very short-lived.
A multi-threaded application would crash when a thread was very
short-lived. The problem seemed to appear with more frequency on the
newer generation of fast processors. The crash occurred in
_CBeginThread which is the C run-time implementation of
_beginthread.
A workaround was to delay the thread from exiting using some sort of
gating technique like Sleep or a signal from the creating process
that permitted the thread to exit.
A more detailed description of the problem follows.
When a thread is created, a thread handle is returned to the process
doing the CreateThread. Our run-time library wants to pass this
thread handle to the newly "executing" thread so that when the
thread exits, the thread can free the handle itself.
The "main" process passes the thread handle to the thread by storing
it at a location provided by the thread. This location is "created"
by the thread so the main process waits for an event that signals
that the location is created. But here's what happens. The thread
signals the event and keeps on executing. In fact, it executes right
through to the termination code and exits before the main process is
dispatched again. Eventually the main process is resumed (since the
event that it waited on has occured) and then it stores the handle
into memory. This memory however no longer exists because the thread
has already come and gone. An access violation occurs.
The problem was fixed by adding code to complete the handshaking
process (the problem had been already half solved). The thread now
waits for the creating process to provide the handle.
===========================================================
C spawn... functions with P_NOWAIT under Win32 no longer allocate an
extra process handle.
===========================================================
C Simplefied Win32 version of _pipe. Pipes are inheritable if you use
the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode
attribute.
===========================================================
C Fixed the multi-byte character functions so that they work
correctly for all double-byte character sets (not just Japanese). The
revised functions are:
_mbctolower
_mbctoupper
_ismbcalnum
_ismbcalpha
_ismbccntrl
_ismbcdigit
_ismbcgraph
_ismbclegal
_ismbclower
_ismbcprint
_ismbcpunct
_ismbcspace
_ismbcsymbol
_ismbcupper
_ismbcxdigit
_mbslwr, _fmbslwr
_mbsupr, _fmbsupr
===========================================================
C Fixed Win32 version of _dos_findfirst/_dos_findnext so that
_A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly.
===========================================================
C Fixed Netware version of library so that code-gen support routines
like __i8d are not exported. This removes the problem caused when
2 or more NLMs ended up exporting the code-gen support routines.
===========================================================
C Removed assert from low-level thread data pointer acquisition
routine (since assert requires a thread data pointer in multi-
threaded applications so it was no good to use assert to complain
that a thread data pointer could not be acquired). Normally,
this problem would not be seen.
===========================================================
C Added some error checking to Win32 cprintf and putch (conio) routines.
===========================================================
C _controlfp called _controlfp rather than _control87 resulting in a
recursive, infinite loop. Changed _controlfp to call _control87.
===========================================================
C Fixed a number of I/O routines to make them thread safe. Included are
the Netware version of fopen, _fsopen, all versions of tmpnam, all
versions of fclose.
===========================================================
C Fixed tzset() for Windows NT/2000 in areas where there is no daylight
savings time. As a result, gmtime() should now be correct for all
areas of the world.
===========================================================
C Fixed the Win32 version of _dos_xxx functions so that they return the
OS error code like their DOS and OS/2 counterparts.
Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value.
Set errno if drive doesn't exist.
Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a
proper errno value.
Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that
they set a proper errno value. Under Win32, they now return a proper
OS error code.
Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(),
_sopen() and __wsopen() so that it first checks to see if it can
store the file handle returned by Win32 before attempting to open
the file. This fix corrects the "orphaned file" problem caused by
opening, then closing a file when the file handle can't be stored.
Fixed the OS/2 spawn routines so that a proper errno value is set
when running out of memory.
Fixed tmpfile() multi-threading problems including infinite loops
when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.)
points to a non-existent path.
Added _strerror() for MS compatibility. Also added wide char version
_wcserror().
Added _doserror() to return Win32 system error message for a
_doserrno value.
Improved mapping of Win32 error codes to errno values.
===========================================================
C Fixed a memory leak in run-time code. Added call to free the
"initial thread data storage" (the storage used by the main
thread in a single-threaded or multi-threaded application).
Affects Win32 and 32-bit OS/2 applications.
===========================================================
C Fixed a problem with tmpnam() in the Netware library in version
11.0c. New names were not being created.
===========================================================
C Fixed bug in Win32 write(). The zeropad function was not necessary
and didn't handle large files, in any case. Now you can seek to a
position > MAX_INT and then write().
===========================================================
C Fixed a problem where _beginthread example was crashing sometimes
===========================================================
C Fixed _chain_intr() so that flags is passed to interrupt handler
===========================================================
C Fixed 32-bit strcmp() so comparing unaligned strings does not fault
===========================================================
B Fixed a bug where an app was doing a chmod() on a file in a
directory and is supposed to remove the file and then delete
the directory itself. Under Win95 the directory was getting
removed, however under NT it was not.
Use div in place of ldiv for 32-bit code, since they should be
the same.
Marked the Product Version as 11.0b for the RTL DLLs, such
as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL,
MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL,
so it is less difficult to distinguish them from older DLLs.
===========================================================
B Fixed a bug where Win386 DLLs would GPF every second time they
are unloaded.
To reproduce this,
modify the samples in samples\fortran\win\dll by adding the line
"call FreeLibrary( hlib )" before the line "FWinMain = 0" in
gen*.for. When you run the samples, they GPF the first, third,
fifth, etc. times when FreeLibrary is called. If you compile/link
these modified samples with 10.6a or earlier versions, then the
problem doc not occur. Reproduce this behaviour under WFW 3.11
and Win NT 4.0. Customer has reproed this under Win 95, and also
reproed it when the DLLs are called from VB 4.0.
===========================================================
B _wtof was missing from the 16-bit math libaries,
and the 32-bit version was returning erroneous results.
===========================================================
B Target: Win32: Using fmod() or modf() in code compiled with /br
was giving undefined references.
===========================================================
B Fixed a bug with itoa() in win16 apps, where you couldn't run
multiple instances of the app. If you tried to, you got
"Cannot start more than one copy of the specified program" under
NT and "Error: Cannot <something> multiple writeable data
segments" under Win 3.x.
===========================================================
B Win32 target only: feof() was not set when end-of-file occurs
on an input pipe. ferror() was being set instead.
===========================================================
B ftime() was not reporting correct timezone field in timeb struct
when TZ is negative.
===========================================================
B Overflow range error in pow was not reported unless /fpc used.
===========================================================
A _findfirst() has been changed to take a const char * instead of
just a char *.
===========================================================
A __FSU87 was trashing ecx - this routine is called to convert an
unsigned __int64 to a float.
===========================================================
A Fixed memory leak, due to us not deallocating the _iomode array
during fini rtns. Also added _UnloadCLib call to library to
allow user to properly unload 16 bit OS/2 user loadable DLLs.
===========================================================
A Fixed a bug where fortran default windowing apps would sometimes
appear to print lines twice, when printing at the bottom of the
screen. Since they were being printed at the bottom of the window
and then not erased when the window scrolled up, leaving a 2nd
copy at the bottom
===========================================================
A Input value range checking for strtod() has been improved for very
small values.
===========================================================
A The runtime dll support has been fixed to no longer leave a
potentially dangerous reference from the C runtime DLL into
whichever DLL has been most recently loaded into the process
image. The reference from the C runtime DLL now points
directly into the Math runtime DLL.
===========================================================
A The _dos_getdiskfree() function for 32bit platforms now has an
expanded data structure.
===========================================================
The assert() function for WIN32 and OS/2 platforms will attempt
to use stderr for output if it is available.
===========================================================
A The __declspec(thread) support for WIN32 platforms has been
improved. In some, pathological cases, it could lead to a GPF
on program startup.
===========================================================
A The system() function for WIN32 platform no longer passes
posix file handles for inheritance by child processes by default.
===========================================================
A The delay() function for NEC98 machines used to hang on
initialization.
===========================================================
A The race condition in the _beginthread() function related
to the saving of the child thread handle has been fixed.
===========================================================
A The multibyte init code for the C runtime library would
always crash on startup when running under the Pharlap
Run386 or TNT DOS extenders.
===========================================================
A The heapchk() function for 32bit platforms could, in some
cases, enter an infinite loop.
===========================================================
A The posix level open() function for WIN32 platforms did not
properly truncate existing files on NT server machines when
run from an NT workstation.
===========================================================
A The WIN32 stat() function now ensures that directories
cannot be marked as character mode devices.
===========================================================
A The WIN32 and OS/2 runtime shutdown code now does a better
job of releasing all resources on image shutdown.
===========================================================
******************
** C++ Compiler **
******************
C The 16-bit compiler now chooses the right default C library
when generating 16-bit multithreaded DLLs. Now
Selecting -bm -bd, generates a reference to CLIBDLL.LIB.
Selecting -bd, generates a reference to CLIBDLL.LIB.
Selecting -bm, generates a reference to CLIBMTL.LIB.
===========================================================
C The C++ compiler did not remember the "signedness" of constants
in enums and would, under the proper conditions, sign extend
an unsigned 64-bit constant.
===========================================================
C Fixed processing of floating-point command line switches.
/fp5, /fp6, floating point code generator switches would
reset /fpi87 model back to defaults and vice versa.
This meant poor floating-point code was generated.
===========================================================
C Fixed packing of structs when -zp16 is used and the
members are aligned to 8-byte boundaries to align
the class to an 8-byte boundary rather than a 16-byte
boundary.
===========================================================
C Fixed diagnosis of pointer comparisons for unrelated
classes. This change also affects the ?: operator
if there are two pointers in the ':' expressions.
Example:
struct A {};
struct B {};
bool fn( A *p, B *q ) {
return p != q;
}
===========================================================
C Fixed compiler to not force static functions to be
linkage "C++".
Example:
extern "C" {
static int fn()
{
return 0;
}
};
===========================================================
C Fixed a problem when a scope had more than approx. 25000
unique symbols in it. The symbol table code in the
compiler could not handle not growing the symbol table
to reduce the average search time.
===========================================================
C Added level 4 warning for switch statements that have
no case labels.
===========================================================
C Handling of const and reference members in a class had
problems when dealing with default op= member function.
Example:
struct NestedA {
NestedA();
~NestedA();
NestedA& operator=( const NestedA& s );
char* & _ptr;
};
struct NestedB {
NestedB();
~NestedB();
NestedB( NestedB& a );
void *pd_ptr;
};
struct NameValuePair {
NestedA x;
NestedB y;
};
int main( int argc, char** argv )
{
NameValuePair a;
NameValuePair b;
a = b;
return 0;
}
===========================================================
C Fixed sizeof( L"1234" ) to return 10 instead of 20.
===========================================================
C Fixed identical function checking to handle the
following case:
enum E { A,B,C };
struct test {
void foo( E );
void bar( E & );
};
void test::foo( E & ) { // error
}
void test::bar( E ) { // error
}
===========================================================
C Fixed a lexical lookup problem from within a member
function in a local class finding a symbol in the
host class. The compiler incorrectly thought that
'this' could be used to access the symbol.
Example:
struct ABC {
ABC() {
static struct B {
void f() {
meth2(); // error
}
} b;
}
void meth2() {
}
};
===========================================================
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
B fixed a bug where using /d2 /hd could cause the compiler to hang.
===========================================================
B fixed a C++ Preprocessor problem: where #if ( x > y ) could
produce incorrect results when x and y are expressions.
===========================================================
B An error was missing in the following case:
extern void f( int a, char *b );
extern void f( int a );
void *pf = f;
Work around: none
===========================================================
B Anonymous structs or classes within unions could not always
be initialized properly.
struct s
{
union
{
struct
{
float a, b;
};
float c[2];
};
};
s d = { 0.0, 0.1 };
Work around: Set values in object manually.
===========================================================
B Output a warning if a #endif isn't in the same source
file as its companion #if.
Example:
--- foo1.h ---
#ifndef FOO1
#define FOO1
#endif
#endif // warning
--- foo2.h ---
#ifndef FOO2
#define FOO2
#include "foo1.h"
#endif
--- foo.c ---
#include "foo2.h"
===========================================================
B A
/
D B
\ /
C
We no longer prefer the conversion from C->D over the conversion
from C->A as the number of levels of conversion does not matter
when D and A are not related.
===========================================================
B Added level 3 warning for unary '-' of an unsigned
operand (result type is still unsigned). Cast operand
to signed type to remove warning.
Example:
void bar( int );
void bar( unsigned );
...
// selects bar( unsigned )
foo( -2147483648 );
===========================================================
B Improved PCH reading of error message levels so that
header file changes are added to current message
levels rather than performing a complete replace of
the error message levels and ignoring any command
line adjustments.
===========================================================
B Fixed problem with -d2s that caused run-time error
"undefined constructor or destructor called!" to occur.
===========================================================
B Was not generating correct code for some default functions
in classes with modifiers.
Work around: write definitions for required constructors,
destructors, and operator = functions
===========================================================
B Was not generating correct code for the default operator =
when the class contained an array of elements where an element
could be byte-for-byte copied and also had virtual functions.
===========================================================
B Destruction sometimes was omitted following a delete which
followed a block closure which contained a destruction.
Work around: introduce a destructable temporary before
the delete.
===========================================================
B Fixed scanning of large strings with escaped characters.
Example:
char *p = "\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n";
Work around: break string up into smaller strings and
let compiler concatenate them
"1234567890" --> "12345" "67890"
===========================================================
B Added warning from scanner whenever a trigraph
is processed.
Example:
// string expands to "(?]?~????"!
char *e = "(???)???-????";
// work around:
char *f = "(" "???" ")" "???" "-" "????";
char *g = "(\?\?\?)\?\?\?-\?\?\?\?";
===========================================================
B Fixed analysis of shift operators with regard to
result type. Previously the result type was the
same as other binary arithmetic operators. Now
the result type is the promoted type of the left
hand operand.
Example:
int f( int x, unsigned s ) {
// should do signed right shift
return x >> s;
}
===========================================================
B Compiler incorrectly warned that new/delete operators
were declared in a namespace when they were declared
as friends of a class.
Example:
class N {
friend void *operator new( unsigned );
friend void operator delete( void * );
friend void *operator new[]( unsigned );
friend void operator delete[]( void * );
};
Work around: disable warning
===========================================================
B Compiler incorrectly diagnosed an invalid constant
when inside a preprocessing #if region that should
have been excluded from such errors.
Example:
#if 0
Version 35I63
#endif
Work around: put constant in a comment (if possible)
===========================================================
B Compiler now correctly evaluated all preprocessor
expressions involving binary operators of the same
precedence.
Example:
#if (0 < 2 - 1 + 3)
now correctly evaluates to TRUE. It previously
evaluated as if the expressions was
( 0 < 2 - ( 1 + 3) )
Note: this bug only occurred in preprocessor expressions.
===========================================================
B Compiler now initializes member pointers at link-time
in more cases than before (notably array initialization).
===========================================================
B Constant folding of 64-bit arithmetic would incorrectly
warn about overflow if the expression involved two 32-bit
quantities multiplied together to produce a 64-bit quantity.
===========================================================
B wpp: -zff and -zgf now generate code that doesn't save
fs/gs in the prologue/epilogue of the function (matches
behaviour of C compiler and ds/es). The pop of fs/gs
would fault if the selector had been freed.
===========================================================
B Fixed error recovery for the following code fragment:
template <class T : public Base > struct S {};
===========================================================
B wpp: optimized -3 code to use size override prefixes
when dealing with push and mov immed instructions.
===========================================================
B Under several combinations of options ?: did not generate
proper code to select static member functions.
typedef void (*void_func)();
class A
{
public:
static void f();
static void g();
};
void_func func(bool b)
{
return b ? A::f : A::g;
}
Work around: Avoid use of ?:, for example,
void_func func(bool b)
{
if( b )
return A::f;
else
return A::g;
}
===========================================================
B Fixed a problem where the compiler went into an infinite
loop generating Dwarf debug information with namespaces
that contained typedefs referencing types in other
namespaces.
Work around: use -d3 instead of -d2
Example:
class A {
public:
virtual ~A() {}
};
class B {};
namespace N {
class C {};
typedef B T;
class D {
public:
virtual ~D() {}
};
class E : public D, public A {
public:
E() {}
B* getB() {
return 0;
}
C* getC() {
return 0;
}
};
}
===========================================================
B Fixed a problem where function template instantiations
were not being set to C++ linkage.
Work around: don't use function templates in extern "C"
blocks or functions
Example:
template <class T>
void tf(T) {
return;
}
struct A { } a;
struct B { } b;
extern "C" void bar() {
tf(a);
tf(b);
}
===========================================================
B Allow bool op= bool expressions
Work around: break up expression A op= B into A = A op B
Example:
void foo( bool a, bool b ) {
a |= b;
}
===========================================================
B Fixed compiler GPF in situations where an abstract class
tries to create or return itself. The GPF was caused by
the compiler trying to output a good error message with
all the unimplemented abstract methods.
Example:
class A {
virtual ~A() { }
virtual void *fn( char *name ) = 0;
A Next() { return( _next ); }
};
void foo( A *it )
{
it->Next();
}
===========================================================
A Fixed a minor bug that caused spurious warnings to be
generated for pre-compiled headers containing integer
constants.
The following example, if used in a pre-compiled header,
would cause a warning about truncating integer constants:
class Foo {
public:
int Bar(int, int=1); // warning generated here
};
===========================================================
A Was mis-diagnosing conversions from types of the form
Type cv1 * cv2 &
to types of the form
Type cv3 * cv4 &
when cv3,cv4 are more qualified than cv1,cv2 respectively
and cv4 does not contain "const" (it must for the
conversion to be legal).
Work around: none, the conversion is illegal.
===========================================================
A Changed the alignment of doubles and long doubles to be
on 8-byte boundaries when not optimizing for space. This
will increase performance on many hardware configurations.
===========================================================
A Incorrect code was being generated for "?:" sequences
when the target is a class object and when the expression
between the "?" and the ":" was converted to the type of
the expression following the ":"
work around: cast the expression between the "?" and the
":" to the type of the expression following
the ":"
example:
struct Cls {
Cls( int );
Cls( Cls const & );
};
extern Cls target;
void foo( bool test, int int_val, Cls const & class_val )
{
target = test ? int_val : class_val; // generated bad code
}
The work-around is to re-code foo as follows:
void foo( bool test, int int_val, Cls const & class_val )
{
target = test ? Cls( int_val ) : class_val;
}
===========================================================
A When the -za switch is not specified (i.e., when
extensions are enabled) the compiler was extended to
accept as member pointer values, class-qualified and naked
non-static member functions. The proposed standard
requires that & precede a class-qualified name.
struct S {
int foo( float );
};
int (S::*mp)( float ); // a member-pointer variable
...
// the following are all accepted:
mp = &S::foo; // standard
mp = S::foo; // extension
mp = foo; // extension (must be in scope)
===========================================================
A Fixed a bug that caused the compiler to crash under certain
conditions when writing a pre-compiled header.
===========================================================
A Fixed compiler so that floating point support is loaded
if you call a routine with the address of a double.
This is req'd if you need to skip floating point numbers
but never use them.
e.g.,
scanf( "%d %f %d\n", &i1, &d1, &i2 );
===========================================================
A Fixed compiler so that -dXXX="a-/ b" is allowed.
Compiler was terminating -d macro definition at
a -, /, or white space.
===========================================================
A Fixed problem where a MI conversion was required before
initializing a const reference temporary.
Example:
struct A { int a; };
struct C { int c; };
struct B : public C, public A { int b; };
typedef A * T;
T check;
struct Array {
void Append( const T & t ) { if( t != check ) _fail; }
void Remove( const T & t ) { if( t != check ) _fail; }
};
void Foo( B * b )
{
Array arr;
A * a = b;
arr.Append( a );
arr.Remove( b );
}
int main()
{
B b;
check = &b;
Foo( &b );
_PASS;
}
===========================================================
A Fixed problem where direct calls to __stdcall dtors
were incorrectly routed through a calling convention
thunk normally used for table-driven destruction.
===========================================================
A When generating preprocessed output, the compiler now
eliminates empty lines if you do not want #line
directives.
===========================================================
A Correctly handle multibyte characters with the second
byte equal to 0x5c ('\\') when they terminate a C++
//-style comment (i.e., do not treat them as a line
splice).
Example:
// <0x81><0x5c>
===========================================================
A A function that calls setjmp will have its local
variables marked as "stay in memory" but this
attribute incorrectly affected function template
generic type binding.
Example:
#include <setjmp.h>
template <class T>
void delete_object( T*& object ) {
if( object ) {
delete object;
object = NULL;
}
}
struct CValue {
int i;
};
void foo() {
CValue *v;
jmp_buf b;
setjmp(b);
delete_object(v);
}
===========================================================
A Fixed problem with C++ empty base optimization that
caused spurious errors to be diagnosed.
Example:
struct CClassBase {
};
struct CClass2 : public CClassBase {
struct CClass1 {
CClass1(int) {}
};
CClass1 m_c;
protected:
CClass2(void);
};
CClass2::CClass2(void)
: m_c(1) {
}
===========================================================
A Fixed problem with macro expansion that triggered
boundary conditions in the compiler which in turn
caused incorrect macro expansion.
Example:
#define example( b ) b ## _X Y_ ## b ## _Z
example( x123456789012345678901234567890 )
example( x12345678901234567890123456789 )
example( x1234567890123456789012345678 )
example( x123456789012345678901234567 )
example( x12345678901234567890123456 )
#undef example
===========================================================
A Fixed problem with error recovery in complex
source code with __stdcall classes.
===========================================================
A Return expressions with comma operators sometimes were compiled
incorrectly.
This resulted in a bad library for multi-threaded Netware when
exceptions were used.
Work around: assign the expression to a temporary and then
return the temporary.
example:
int x;
void foo( int y ) {
return ( x = 1 , y + 1 );
}
replace by:
int x;
void foo( int y ) {
int temp = ( x = 1 , y + 1 );
return temp;
}
===========================================================
A If a source file doesn't end in a new-line, the C++
compiler now compensates for this to allow new-line
terminated preprocessing directives to work properly.
Example:
#define C 3 // file doesn't end in '\n'
===========================================================
A Incorrect code was generated for an argument to an ellipsis
function (one declared with '...' ) which was computed as an
lvalue class value for a destructible class.
Example:
void foo( int, ... );
class S {
. . .
~S();
. . .
};
S* p1;
S* p2;
bool b;
. . .
int i = foo( 1997, b ? *p1 : *p2 );
Work around: use a cast to force underlying expressions
to be rvalues:
int i = foo( 1997, b ? (S)*p1 : (S)*p2 );
===========================================================
A Compiler would crash when it could not generate RTTI
info into a 64k segment (only applies to 16-bit targets).
The error was reported properly but recovery resulted
in a memory fault in the compiler.
===========================================================
A Compiler would crash (infinite loop or page fault) when
inlining functions that contained certain usages of
anonymous unions.
Example:
inline int ii( int i ) {
union {
int x;
unsigned char y;
};
x = 0;
y = i;
return x;
}
...
ii( q );
Work around: #pragma inline_depth(0)
===========================================================
A Tweaked scanning of pp-number tokens in non-ISO/ANSI mode
so that old code continues to compile correctly.
Example:
#define A10 3
#define A11 0x1e+A10
int v = A11; // 0x1e + 3
===========================================================
A Added -mfi option to indicate to the compiler that interrupt
functions can assume the flat memory model is preserved.
If this option is not used, interrupt functions have to
assume that a different stack segment is being used and
so auto data must be manipulated as far data.
===========================================================
A Fixed diagnostic of 'void' expression types in certain
contexts.
Example:
void a();
int __u( int i ) {
return i == a() || a() == i;
}
===========================================================
A Added diagnostic to identify cases where the calling
convention of a virtual function override has changed.
Example:
struct B {
void __stdcall foo( int, int );
};
struct D : B {
void foo( int, int );
};
===========================================================
A A function such as
Composed* ctor( Composed const & src )
{
AnotherDtorable stuff_1;
AnotherDtorable stuff_2;
AnotherDtorable stuff_3;
Composed* ptr = new( some_data ) Composed( src );
return ptr;
}
where AnotherDtorable and Composed are destructable objects
could cause the object located by ptr to also be destructed
under some combinations of options.
Work around: place the new statement in a separate function.
===========================================================
A The following code generated a spurious warning, claiming that
fn was unreferenced.
extern void import( const void * );
static void fn() {}
void external()
{
const void * foo = fn;
import( foo );
}
Work around: ignore that warning or disable it
===========================================================
A Diagnose extra initialization arguments for parenthetical
initialization of non-class types.
Example:
int h(1);
int f(1,2,3);
int g( int(1,2,3) );
foo() {
int q = 1, // <- notice comma
f(1,2,3);
}
===========================================================
A Diagnose definition of member functions that are not
declared but match the signature of another member
function with default arguments.
Example:
struct A {
void f1( int, bool = false );
};
void A::f1( int ) { // error
}
===========================================================
A Corrected problem where a inline template function
was incorrectly diagnosed as undefined if it was
inside a namespace.
Example:
namespace alpha {
template <class T>
inline T & f (T & a) {
return a;
}
inline long b ( long a ) {
return f ( a );
}
}
void fn( void ) {
long a = 100;
long c;
using namespace alpha;
c = b ( a );
}
===========================================================
A Corrected problems where certain class hierarchies
caused problems in generating construction/destruction
code or exception handling state tables. The problems
manifested themselves as incorrect code/data or compiler
faults.
Example:
#include <fstream.h>
#include <stdlib.h>
#include <iostream.h>
class TextFile {
public:
ifstream solidTextFile;
};
class SolidTextFile : public TextFile {
};
void main() {
SolidTextFile aFile;
}
===========================================================
A Corrected problem where, in copy initialization, a
user-defined conversion function from source class to a
non-const reference of the target class would not be
preferred over another ambiguous conversion.
In this example, the conversion A::operator String() going
to String::String( String const & ) should be preferred over
the ambiguous use of the String::String( char ) constructor
from either A::operator int() or A::operator float().
Example:
struct String {
String();
String( char );
};
struct A
{
operator String() const;
operator int() const;
operator float() const;
};
struct B
{
const A& GetitsA();
};
void foo(B b)
{
String s;
s = b.GetitsA();
}
===========================================================
A Fixed reading and writing of the precompiled header
file when it contained C++ EH information for classes.
===========================================================
*****************
** C++ Library **
*****************
C eofbit for ifstream's is now set on a read() when at EOF
===========================================================
C Fixed buffer overrun when specifying a precision (SetPrecision)
greater than LDBL_DIG. This used to cause an application to
crash Windows 95.
===========================================================
C Added conditional semaphore unlock to the destructor of a "lock"
object.
===========================================================
******************
** Disassembler **
******************
C Fixed WDIS so that it correctly disassembles 32-bit code
assembled with MASM/TASM as 32-bit and no longer as 16-bit
===========================================================
C Fixed ORL library so that additional OMF THEADR records in
object files are not diagnosed in error. Additional THEADR
records occur when #include'ing source code and requesting
Codeview debug info.
===========================================================
B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL"
and a few other instructions.
===========================================================
B Wdis did not give the correct code when disassembling memchr().
It placed the label in the wrong position.
This is because the code makes a jump into the
middle of an opcode sequence depending on the result of memchr().
WDISASM with 10.6 "knew" about this and issued DB instructions.
===========================================================
A fixed problem with disassembly of 3-operand imul instructions
(only 2 operands were displayed)
===========================================================
*******************
** Documentation **
*******************
C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK()
are now documented
===========================================================
C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented
===========================================================
C #pragma read_only_file which appears in nearly all Watcom header
files is now documented.
The default depth for #pragma inline_recursion has been corrected.
The default depth is 3.
===========================================================
C Functions
_dieeetomsbin(),
_dmsbintoieee(),
_fieeetomsbin(),
_fmsbintoieee(),
_findfirsti64(),
_findnexti64(),
_wfindfirsti64(),
_wfindnexti64(),
_filelengthi64(),
_lseeki64(),
_telli64(),
_fstati64(),
_wfstati64(),
_stati64(),
_wstati64()
are now documented in the C library.
===========================================================
B Fixed the C library matherr example, so it works with the C++
compiler.
===========================================================
B Watcom 10.6 aligns structure members on a byte boundary by
default.
Watcom 11.0 aligns structure members on an 8 byte boundary
by default.
Fixed some places where the documentation hadn't been updated
from 10.6.
===========================================================
B Added - wlink's OPTION SHOWDEAD, which was not documented.
This option is very useful as it shows in the map file which
functions the linker stripped out.
===========================================================
B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+.
===========================================================
B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs.
The dllsamp.c file was missing a: define EXTERNC.
===========================================================
B Upated Linker docs indicate that incremental linking is not
supported for 16-bit DOS and NetWare targets.
===========================================================
**********************
** Graphics Library **
**********************
C Fixed a bug where vector fonts were being drawn incorrectly
===========================================================
C Now cache the SVGA Page for better performance
===========================================================
C Fixed a bug in NEC version of graphics library "SetPixel" function.
===========================================================
C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have
been turned on. On most adapters, this didn't cause a problem.
On a Number Nine video card, this showed up as a problem in flood
filling an area.
===========================================================
********************
** C Header Files **
********************
C Fixed headers <typeinfo.h>, <exceptio.h> so that they include
other Watcom C++ headers with the .h extension correctly. This was
causing STLPort's headers to be used in preference to Watcom's.
===========================================================
C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two
places. Old version resulted in a loss of an attempted
optimization. The correction will result in better performance
for getc().
===========================================================
C Added Microsoft's FLT_NORMALIZE constant.
Added Microsoft's _DBL_RADIX constant.
Added Microsoft's _DBL_ROUNDS constant.
Added Microsoft's _LDBL_RADIX constant.
Added Microsoft's _LDBL_ROUNDS constant.
Added Microsoft's DBL_RADIX constant.
Added Microsoft's DBL_ROUNDS constant.
Added Microsoft's LDBL_RADIX constant.
Added Microsoft's LDBL_ROUNDS constant.
Changed FLT_MIN_EXP from (-127) to (-125).
Changed DBL_MIN_EXP from (-1023) to (-1021).
Changed LDBL_MIN_EXP from (-1023) to (-1021).
Changed FLT_MIN_10_EXP from (-38) to (-37).
Changed FLT_MAX_EXP from 127 to 128.
Changed DBL_MAX_EXP from 1023 to 1024.
Changed LDBL_MAX_EXP from 1023 to 1024.
Added accurate representations for DBL_MAX, DBL_EPSILON and
DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN.
===========================================================
C Improved code generated from isxxx() functions.
Changed description of messages associated with some errno values.
Added definition of NULL to float.h.
Added prototypes for _strerror(), _wcserror(), _doserror(),
_wdoserror() to string.h.
===========================================================
A const qualifiers have been added to the char* parameters
to the findfirst and variant functions in io.h
===========================================================
A The register mode calling convention prototype for longjmp()
is no longer marked as "#pragma aborts" to facilitate
profiling support.
===========================================================
**********************************************
** Integrated Development Environment (IDE) **
**********************************************
C Fixed incorrect access of C error/warning help file
WCCERRS.HLP (messages were one out)
===========================================================
A Added pentium pro (p6) switches to the options pages
( compiler, linker, assembler, etc. )
===========================================================
A added a switch for Watcom debugging info to the linker
options page - watcom was previously the default if you
selected debug all, now Dwarf is the default
===========================================================
A fixed a resource problem that was causing some of the
buttons and menu items to appear with no text
===========================================================
A Don't use incremental linking for DOS or Netware
applications - it is not supported
===========================================================
A Changed the compiler options for Netware targets to use
-5s, -ms -- stack based, small model
===========================================================
A changed the linker options for 32-bit OS/2 DLL's
now uses op manyautodata, initinstance, terminstance
===========================================================
***************
** Librarian **
***************
C Updated command line help for WLIB /?
Help added for switches -p, -s, -v
===========================================================
C Wlib overwrote an existing object file with no truncation (in the
"*" extract operation). This resulted in a corrupt object file
when the new one was shorter than the old one.
===========================================================
C Fixed some problems related to creating AR format libraries
using the -fa switch.
===========================================================
B Wlib wasn't giving a warning message if you tried to extract
a nonexistent object file.
===========================================================
************
** Linker **
************
C Fixed problem where WLINK was inserting random text
(often parts of WLSYSTEM.LNK) in the final executable
===========================================================
C Fixed WLINK so that it now works interactively again
===========================================================
C Added support for case-insensitive searching of COFF (AR-format)
libraries. For example, the linker now matches _SLEEP@4 with
_Sleep@4 in KERNEL32.LIB.
===========================================================
B Fixed output of QNX executables for a rare case of
internal buffer filling.
===========================================================
B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare,
in 11.0 you didn't get an error to indicate this
===========================================================
B fixed a bug where
"wlink debug watcom types" or
"wlink debug watcom locals" or
"wlink debug watcom lines"
would all cause the linker to crash
"wlink debug watcom all" was fine
===========================================================
B NT linker was crashing if you ran it with no arguments, and
typed something at the WLINK> prompt
===========================================================
B fixed a bug where WLINK was crashing while trying to link an app
with codeview debuggin info
===========================================================
**********
** Make **
**********
A In non-Microsoft mode, WMAKE will find and process
a file named "MAKEFINI" after all makefiles have been
processed.
===========================================================
***********************
** Resource Compiler **
***********************
C Added support for CodePage 1250 to UNICODE translation (1250.UNI).
===========================================================
**************
** Debugger **
**************
B dwarf dip now exits gracefully if it failes to load debug info
===========================================================
B Fixed a bug on DOS or Win95 Host:
binw\wd was crashing on loading DOS/4GW EXE.
The debugger was running out of memory trying to read in a large app
or large app + symbolic debugging info (.SYM) file.
Problem did not occur with the binnt debuggers under NT.
===========================================================
B binw\wd was crashing when inspecting ofstream structure with
Watcom or Codeview debugging information.
===========================================================
B Debugger was crashing when double-clicking on an entry in calls window.
===========================================================
B If winserv terminated abnormally for any reason, you could not
restart it unless you gave the server a different name. This is a
bigger problem than appears at first, because the IDE uses an
unnamed debug server. As such, if you were debugging DOS/4GW
under Windows 95 and the application crashed the server, then you
had to reboot before you can debug in the IDE to start the debugger
again. Winserv will now free the name and try again if it tries
to connect to a server and is unable to connect.
===========================================================
A Rolled back DOS4G extender to 1.96 to fix pharlap application
debugging crashes.
===========================================================
A fixed a bug where you couldn't debug "Large" DOS/4GW apps
===========================================================
***************
** Assembler **
***************
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
C Fixed message numbers so that they increase sequentially from 1
and from 500 in each of the two groups of messages. Previously,
message numbers had large gaps in them.
===========================================================
B Fixed a bug where wasm wouldn't assemble:
"psrlq m1, dummy"
where dummy is a quadword
It gave an error: "Second operand too big".
===========================================================
*********************
** Watcom Profiler **
*********************
C Fixed "Out of Memory" error when sample file has no samples.
Fixed disassembly error in display of location counter (eip/ip).
===========================================================
*********************
**** Clone Tools ****
*********************
C Fixed CL & CL386 so that switches -MD or -MDd are translated as
the equivalent Watcom switch -br. Previously no translation
was occuring. For the real Microsoft tools, the switches means
using the Run-Time Libraries in DLL form. Correcting this means
the equivalent Watcom Run-Time Libraries in DLL form will be used.
===========================================================
Changes in 11.0 that may Require Recompilation:
-----------------------------------------------
clock()
The clock function accuracy has changed from 100 ticks per second to
1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code
that uses the clock function and CLOCKS_PER_SEC in its calculations
must be recompiled before linking the application with new libraries.
Major Differences from Version 10.6:
------------------------------------
The following sections summarize the major differences from the
previous release of Watcom C/C++.
In general, we have improved Microsoft compatibility in our compilers
(more warnings instead of errors, support for MS extensions, etc.)
and tools. Some of the Win32 and 32-bit OS/2 versions of our tools
are now available in DLL form.
EXE DLL Description
------ ------- -----------------------
wcc wccd 16-bit x86 C compiler
wcc386 wccd386 32-bit x86 C compiler
wpp wppdi86 16-bit x86 C++ compiler
wpp386 wppd386 32-bit x86 C++ compiler
wlink wlink Watcom Linker
wlib wlibd Watcom Library Manager
This provides better performance when using the Integrated Development
Environment or Watcom Make. See the description of the !loaddll
preprocessing directive in Watcom Make for more information.
Changes to the C++ Compiler for 11.0
------------------------------------
We have added support for namespaces and RTTI (Run-Time Type
Identification).
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the C Compiler for 11.0
----------------------------------
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Code Generator for 11.0
--------------------------------------
A new optimization, "branch prediction", has been added. This
optimization is enabled by the "ob" or "ox" compiler options.
The code generator tries to increase the density of cache use by
predicting branches based upon heuristics (this optimization is
especially important for Intel's Pentium Pro). We have added
Multi-media Extensions (MMX) support to the in-line assemblers.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Compiler Tools for 11.0
--------------------------------------
The Watcom Linker supports incremental linking.
The Watcom Library Manager (WLIB) can now understand COFF and ELF
format object files, as well as OMF et al. The Watcom Library
Manager can now read/write AR-format (Microsoft compatible),
Multilib (used by IBM for PowerPC version of OS/2), or old-style
OMF libraries. The default output format is AR-format and this can
be changed by switches. The Watcom Library Manager can output various
format import libraries.
We have added Multi-media Extensions (MMX) support to the Watcom
Assembler (WASM). A new version of the Watcom Disassembler (WDIS)
is included. It can process ELF, COFF or OMF object files and ELF,
COFF or PE format (Win32) executables.
The old disassembler (WDISASM) has been retired and is not included
in the package.
We have added new tool front-ends that emulate Microsoft tools.
These are:
nmake
cl
link
lib
rc
cvtres
mapsym
These programs take the usual Microsoft arguments and translate them,
where possible, into equivalent Watcom arguments and spawn the
equivalent Watcom tools.
Watcom Make now processes Microsoft format makefiles when the "ms"
option is used.
Changes to the C/C++ Libraries for 11.0
---------------------------------------
We have added multi-byte and wide character (including UNICODE)
support to the libraries.
We include run-time DLLs for the C, Math and C++ Libraries.
We have added Multi-media Extensions (MMX) support to the libraries.
The following new functions were added to the library...
mb functions
The clock function accuracy has changed from 100 ticks per second
to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed).
Changes to the DOS Graphics Library for 11.0
--------------------------------------------
The graphics library now performs the VESA test before testing for
vendor specific graphics cards. This fix is intended to broaden
the number of graphics cards that are supported.
For details on what was new in versions 10.6 and earlier, see the
GETTING STARTED helpfile.
Other notes:
Note: %DstDir% represents the directory in which WATCOM C/C++ was installed.
%WinSysDir% represents your Windows 3.x system directory.
1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure
that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your
path. Failure to do so, may cause your computer to hang.
2. When using the GUI debugger to debug Windows 3.x applications, certain
Windows applications may cause the debugger to behave in an unpredictable
way. Typically, this occurs when debugging certain messages in window
callback functions. For example, hitting a breakpoint in a window
function that is processing a WM_INITDIALOG message will crash the system.
If this happens, the character-mode version of the debugger should be
used.
3. In order to use CodeWright with our IDE, you will need to change the
"cwright.ini" file. This file contains the following line.
;LibPreload=cwdde.dll
Uncomment this line by removing the ';' character. This is required to
enable communication between the IDE and CodeWright when "weditcw.dll"
is selected as the editor interface DLL from the IDE.
4. If you choose to not install help files onto your hard disk, you will not
be able to get help on the C library or MFC library from the editor.
5. Parallel remote debug servers now work in an OS/2 session.
6. When configuring the browser to use the CodeWright editor interface, you
must specify "weditcw.dll" as the editor DLL, save the new options, exit
the browser, and restart the browser. Failure to do this will cause an
exception to occur in the CodeWright interface DLL.
7. Under OS/2, if you are debugging a DOS application from the IDE, you
must ensure that %DstDir%\binw is in your DOS path so that when the IDE
starts a DOS session to debug your application, the remote server can find
its support files.
8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is
disabled if you want to debug PM applications. By default, this setting
is disabled.
10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the
directory which contains RC.EXE occurs too late in your PATH environment
variable ( > 250 characters ). If you experience problems with RC.EXE,
you should change the PATH environment variable in your CONFIG.SYS file,
by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path. |
Watcom C++ & Fortran v. 11.0c (1/12/2002, SciTech Software) |
Readme/What's new |
WATCOM C/C++ Version 11.0c - README
-----------------------------------
Welcome to WATCOM C/C++ version 11.0c. This README provides helpful
hints found during testing as well as updated information that was
not available at the time the documentation was produced.
This file includes:
-------------------
Important
Environment variables
11.0 C-level Notes
11.0 B-level Notes
Fixes in versions 11.0 C, B and A-level
Changes in 11.0 that may Require Recompilation
Major Differences from Version 10.6
Other General Notes about version 11.0
===========================================================
Important
===========================================================
Some Watcom tools currently do not function properly if installed in a
directory with spaces in the name e.g. "C:\Program Files\WATCOM".
Therefore choose a directory name like C:\WATCOM, D:\WATCOM etc. to install
the tools in.
===========================================================
Environment variables used by Watcom C/C++
===========================================================
For proper operation the Watcom compilers require few environment variables
to be set up correctly. These variables differ slightly depending on the
host platform (DOS, OS/2, Win32). The common variables are:
- PATH - points to directories containing Watcom executables
- WATCOM - points to the directory where Watcom 11.0c is installed and is
used by various Watcom tools to locate files
- EDPATH - points to VI/VIW configuration files
- INCLUDE - points to directories containing header files is used by the
compilers
- LIB - points to directories containing library files; note that Watcom
linker is able to locate Watcom runtime libraries without this
variable
- WWINHELP - points to the directory on the CDROM drive where help files are
located. This may minimize hard disk space
DOS specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win16 specifics
- PATH - only needs to point to the binw directory
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
Win32 specifics
- PATH - must point to binnt and binw directories, in that order
- WWINHELP - points to the directory on the CDROM drive where help files
are located. This minimizes hard disk space. Note this is not
needed if the help files are installed on the hard disk
OS/2 specifics
- PATH - must point to binp and binw directories, in that order
- LIBPATH - either the BEGINLIBPATH/ENDLIBPATH environment variable or the
LIBPATH statement in CONFIG.SYS must point to the binp\dll
subdirectory of Watcom 11.0c in order to let the OS find Watcom
DLLs
- HELP - points to binp\help to let Watcom GUI tools locate online help
files
- BOOKSHELF - points to binp\help to allow the IPF viewer (VIEW.EXE) locate
Watcom online manuals
These environment variables can be either set up in your starup files (which
is the most convenient method if Watcom 11.0c is the only compiler you use)
or you can use simple batch files to set these variables (useful if you
need to switch between compilers, including different versions of Watcom
compilers).
Below are several sample batch files for setting the environment variables on
various host platforms. The WATCOM variable must naturally be adjusted
according to where Watcom 11.0c was installed on your system. The LIB
environment variable isn't strictly necessary but you will probably need
to set it for any libraries you use not supplied with Watcom compilers.
Similarly you might need to adjust the INCLUDE variable for 3rd party
library include files.
DOS BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win16 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\WIN
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
Win32 BAT file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH%
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\MFC\INCLUDE;%WATCOM%\H\NT
REM SET LIB=
REM SET WWINHELP=D:\BINW
---------------------------------------------------------------------------
OS/2 CMD file:
---------------------------------------------------------------------------
@ECHO OFF
SET WATCOM=C:\WATCOM
SET PATH=%WATCOM%\BINP;%WATCOM%\BINW;%PATH%
SET BEGINLIBPATH=%WATCOM%\BINP\DLL
SET EDPATH=%WATCOM%\EDDAT
SET INCLUDE=%WATCOM%\H;%WATCOM%\H\OS2
REM SET LIB=
SET HELP=%WATCOM%\BINP\HELP;%HELP%
SET BOOKSHELF=%WATCOM%\BINP\HELP;%BOOKSHELF%
---------------------------------------------------------------------------
===========================================================
11.0 C-level Notes
===========================================================
All files licensed by Microsoft, IBM, Novell, Tenberry,
Pharlap and Blue Sky Software have been removed in this version.
The Windows SDK components and Microsoft Foundation Classes are
not included in the 11.0c update. If you wish to do Windows
programming you are required to have a prior version of Watcom
C/C++ 11.0, especially for MFC support. Watcom C/C++ 10.6 may
work, but this has not been tested.
The DOS/4GW extender is also not included in the 11.0c update.
If you wish to develop programs using DOS/4GW, you are required
to have a prior copy of Watcom C/C++ and use the version of
DOS/4GW that came with your earlier product. Alternatively you can
switch to using the included CauseWay DOS extender which is a drop
in replacement for DOS/4GW (with a few minor differences).
Support for Watcom C/C++ 11.0c is at www.openwatcom.org
===========================================================
11.0 B-level Notes
===========================================================
The SOM toolkit for OS/2 is no longer supported, and has
been removed in this version.
===========================================================
Fixes in versions 11.0 C, B and A-level
===========================================================
The letter in the first column indicates which level the fix
was first introduced.
===========================================================
****************
** C Compiler **
****************
C New warnings 1178-1181 were being counted in the warnings total
yet confusingly were reported as errors in diagnostic messages.
This has been fixed. These warnings are
W1178: Type qualifier mismatch
W1179: Parameter %N, type qualifier mismatch
W1180: Sign specifier mismatch
W1181: Parameter %N, sign specifier mismatch
===========================================================
C The 16-bit compiler now chooses the right default C library
when generating 16-bit OS/2 multithreaded DLLs. Now
Selecting -bm -bd, generates a reference to CLIBDLL.LIB.
Selecting -bd, generates a reference to CLIBDLL.LIB.
Selecting -bm, generates a reference to CLIBMTL.LIB.
===========================================================
C #pragma enum minimum now works as according to
documentation.
A workaround for 11.0, 11.0a & 11.0b is to use
#pragma enum optimize
===========================================================
C Compiler now accepts extended macros when command line
switch -d+ is specified
===========================================================
C Fixed compiler so that expression
unsigned char uc;
int i;
i = !(unsigned char)uc;
is correct
===========================================================
C structs not getting proper alignment for bitfields at the end of
structs inside structs
===========================================================
C blowup if a syntax error happend in a switch expr
===========================================================
C some warnings coming out with error on message
===========================================================
C #pragma disable_message was allowing errors to be muted as well
casuing trouble for code generation.
===========================================================
C Fixed in-line assembly problem with 486/586 instructions when the
/6 compiler option was specified.
===========================================================
C Fixed WCL/WCL386 bug that shows up when you use "/fe=foo.exe /fm".
The map file was named "FOO.EXE" which caused bizarre executables
to be created.
===========================================================
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
B casting not getting flags like volatile correctly on pointers
casting of unlike pointers not getting done
__i64 numeric literals getting signed extended if number could
fit in 32 bits
-v option putting const/volatile on wrong side of a pointer
===========================================================
B added a warning when trigraphs as used
===========================================================
B _asm sometimes causing lookup problems if followed by an id on
the next C statement
===========================================================
B typedef function names not getting correct return type noticed
when returning double
===========================================================
B added warning for #if #endif pairs that come from different files
===========================================================
B -zpw giving error instead of a warning
===========================================================
B exceptions when getting a syntax error inside sizof operator
===========================================================
B fixed looping bug in error recovery of declarations
===========================================================
B constant folding of (int)((struct *)0+1) always returning 0
===========================================================
B const ? struct : struct causes compiler error
===========================================================
B fixed a bug where typedef double (fortran_tc)(void) wasn't working
as it did in 10.6.
===========================================================
B fixed a bug where using a typedef'ed function prototype no longer
worked in 11.0 if the function prototype and its definition are
in separate files
===========================================================
B wcc/wcc386 would crashes on the line #if ! after reporting:
Error! E1063: Missing operand and then crashes,
while wcc/wcc386 -p also crashes but does not report the error.
===========================================================
B A single-line _asm statement without braces that refers to a
variable would generate an error message. wpp/wpp386 compilers
handle this sample correctly
===========================================================
A fixed folding bug with static intialization
#line comming out after latline in include file at times
allowing macro expansion of #define 1230e+A2 where A2 is a macro
indirect functions call of non default call types ie. stdcall
not working
.obj files sometime being created if error occurred in compile
incorrect calls somtimes being made with functions that have
unspecified parm definitions
===========================================================
********************
** Code Generator **
********************
C Fixed combining two move short constants into one move
dword constant followed by two move byte constants that
combined. The codegen would incorrectly "forget" the
first byte-byte combined move after the short-short
combined move.
Example:
struct S {
unsigned short a,b;
unsigned char c,d,e,f;
};
void foo( S *p ) {
p->a = 1;
p->b = 2;
p->c = 3;
p->d = 4;
p->e = 5;
p->f = 6;
}
===========================================================
C Fixed a problem where 64-int constants were being
aliased to 64-bit floating point constants in such
a way that the values are incorrect.
Example:
struct S {
double d;
__int64 x;
};
void foo( S *p ) {
p->d = 6.25;
p->x = 0; // changes to p->x = 6;
}
===========================================================
B When static member functions are supplied to the ?: operator, no
code was being generated
===========================================================
B added a compiler switch to disable the "common epilogue"
optimization.
===========================================================
A If optimizing for time, align procedures on 16-byte
boundaries for anything above a 486.
===========================================================
A Fixed a problem with short-circuit operators in which
a side effect would be discarded (ie ( (a=b) || 1 )
would get reduced to (1) and the (a=b) discarded. Ditto
for ( (a=b) && 0 ).
===========================================================
A Fixed a problem with long filenames in object file
generation.
===========================================================
A Fixed a problem with loopopts and far pointers - if
inductions optimizations introduced an add of an integer
to a far pointer, it was possible that the add would be
generated incorrectly, resulting in some highly suspicious
references to odd locations such as -1[bp] or 7[bp].
===========================================================
A Fixed a problem in which conversions between floats and
ints (or floats and doubles) within a union might not
be generated correctly.
===========================================================
***************
** C Library **
***************
C Internal routines __FSU8, __FDU8, __FSI8, __FDI8, __I8FS,
__U8FS, __I8FD, __U8FD, used to convert between float, double
and signed __int64, unsigned __int64 for alternate maths
libraries were
- missing for 32-bit C libraries
- converted incorrectly for 16-bit C libraries
This is now fixed
===========================================================
C Fixed sys_nerr so that it was the right value
===========================================================
C Internal routine __GETDS has been added to the 32-bit OS/2 C
libraries
===========================================================
C Internal functions __U8FD7 and __U8FS7 have been made smaller
and faster. These routines are used to convert unsigned __int64
to double and single respectively.
Internal function __I4D is now faster under some circumstances
===========================================================
C Fixed scanf() family where the wrong count would be obtained
for floating-point input. e.g:
int charcnt;
double data;
sscanf( "123." , "%lg%n", &data, &charcnt );
Fixed scanf() family so that the negative sign is handled
when reading unsigned integers (a requirement of ANSI C)
===========================================================
C Fixed _fullpath() where under certain circumstances the heap
could be corrupted
===========================================================
C Fixed memory leak in tmpfile() for Netware libraries
===========================================================
C _searchenv() now works for quoted paths including 4NT-style
paths
===========================================================
C Fixed problem in memory allocator that could cause NULL
to be returned without going to the system to get more
memory.
===========================================================
C Fixed bug in __brktime in gmtime.c. Jun 2, 2101 was returned as
Jun 1, 2101. Affected ctime, localtime, gmtime.
===========================================================
C Fixed bug in delay() for DOS/16, DOS/32, Win 3.1 and Win386.
Previous version did not work at all for a number of reasons.
New version is accurate to within +/- 1/100 second.
===========================================================
C Fixed bug in printf formatting. %#.6g would not display trailing
zeros for a number like 1.0e6. Output was 1.e+006 when it should
have been 1.00000e+006. Fix was made to _ldcvt().
===========================================================
C Fixed eof(), filelength(), fsync(), _os_handle(), _get_osfhandle(),
and setmode() in Netware library by removing a failing file handle
check.
===========================================================
C Fixed bug in mktime() that affected 16-bit libraries. Years >= 2079
resulted in truncation due to 16-bit rather than 32-bit precision.
Changed 365 to 365L to force 32-bit calculation.
===========================================================
C Fixed bug in run-time exit code. Made sure that _WindowExitRtn is
called early on in exit() rather than in _exit() (since run-time
system is shut-down by the time _exit gets called).
This bug impacted "Save as" in default windowing support.
===========================================================
C Fixed bugs in _wputenv, _wsetenv, _wgetenv that caused a crash in
clearenv at program exit.
===========================================================
C Fixed opendir() for DBCS environments (where backslash, slash,
asterisk and question mark might appear as the second character
of a double-byte character in a path specification). We now use
_mbsinc() and _mbsnextc() to scan a path string.
===========================================================
C Added _mktemp() to other platforms including 16/32-bit DOS, 16-bit
Windows, 32-bit extended Windows and 16/32-bit OS/2. Previously,
only Win32 was supported.
===========================================================
C Fixed a problem with multi-threaded applications where a thread
was very short-lived.
A multi-threaded application would crash when a thread was very
short-lived. The problem seemed to appear with more frequency on the
newer generation of fast processors. The crash occurred in
_CBeginThread which is the C run-time implementation of
_beginthread.
A workaround was to delay the thread from exiting using some sort of
gating technique like Sleep or a signal from the creating process
that permitted the thread to exit.
A more detailed description of the problem follows.
When a thread is created, a thread handle is returned to the process
doing the CreateThread. Our run-time library wants to pass this
thread handle to the newly "executing" thread so that when the
thread exits, the thread can free the handle itself.
The "main" process passes the thread handle to the thread by storing
it at a location provided by the thread. This location is "created"
by the thread so the main process waits for an event that signals
that the location is created. But here's what happens. The thread
signals the event and keeps on executing. In fact, it executes right
through to the termination code and exits before the main process is
dispatched again. Eventually the main process is resumed (since the
event that it waited on has occured) and then it stores the handle
into memory. This memory however no longer exists because the thread
has already come and gone. An access violation occurs.
The problem was fixed by adding code to complete the handshaking
process (the problem had been already half solved). The thread now
waits for the creating process to provide the handle.
===========================================================
C spawn... functions with P_NOWAIT under Win32 no longer allocate an
extra process handle.
===========================================================
C Simplefied Win32 version of _pipe. Pipes are inheritable if you use
the SECURITY_ATTRIBUTES struct. Added support for O_NOINHERIT mode
attribute.
===========================================================
C Fixed the multi-byte character functions so that they work
correctly for all double-byte character sets (not just Japanese). The
revised functions are:
_mbctolower
_mbctoupper
_ismbcalnum
_ismbcalpha
_ismbccntrl
_ismbcdigit
_ismbcgraph
_ismbclegal
_ismbclower
_ismbcprint
_ismbcpunct
_ismbcspace
_ismbcsymbol
_ismbcupper
_ismbcxdigit
_mbslwr, _fmbslwr
_mbsupr, _fmbsupr
===========================================================
C Fixed Win32 version of _dos_findfirst/_dos_findnext so that
_A_SUBDIR, _A_HIDDEN, and _A_SYSTEM work correctly.
===========================================================
C Fixed Netware version of library so that code-gen support routines
like __i8d are not exported. This removes the problem caused when
2 or more NLMs ended up exporting the code-gen support routines.
===========================================================
C Removed assert from low-level thread data pointer acquisition
routine (since assert requires a thread data pointer in multi-
threaded applications so it was no good to use assert to complain
that a thread data pointer could not be acquired). Normally,
this problem would not be seen.
===========================================================
C Added some error checking to Win32 cprintf and putch (conio) routines.
===========================================================
C _controlfp called _controlfp rather than _control87 resulting in a
recursive, infinite loop. Changed _controlfp to call _control87.
===========================================================
C Fixed a number of I/O routines to make them thread safe. Included are
the Netware version of fopen, _fsopen, all versions of tmpnam, all
versions of fclose.
===========================================================
C Fixed tzset() for Windows NT/2000 in areas where there is no daylight
savings time. As a result, gmtime() should now be correct for all
areas of the world.
===========================================================
C Fixed the Win32 version of _dos_xxx functions so that they return the
OS error code like their DOS and OS/2 counterparts.
Fixed _getdcwd(), _wgetdcwd() so that they set a proper errno value.
Set errno if drive doesn't exist.
Fixed putenv(), _wputenv(), setenv(), _wsetenv() so that they set a
proper errno value.
Fixed _wdos_findfirst(), _wdos_findnext(), _wdos_findclose() so that
they set a proper errno value. Under Win32, they now return a proper
OS error code.
Fixed Win32 version of open(), _wopen(), sopen(), _wsopen(),
_sopen() and __wsopen() so that it first checks to see if it can
store the file handle returned by Win32 before attempting to open
the file. This fix corrects the "orphaned file" problem caused by
opening, then closing a file when the file handle can't be stored.
Fixed the OS/2 spawn routines so that a proper errno value is set
when running out of memory.
Fixed tmpfile() multi-threading problems including infinite loops
when the "TEMP" environment variable (TMP, TEMP, TMPDIR, etc.)
points to a non-existent path.
Added _strerror() for MS compatibility. Also added wide char version
_wcserror().
Added _doserror() to return Win32 system error message for a
_doserrno value.
Improved mapping of Win32 error codes to errno values.
===========================================================
C Fixed a memory leak in run-time code. Added call to free the
"initial thread data storage" (the storage used by the main
thread in a single-threaded or multi-threaded application).
Affects Win32 and 32-bit OS/2 applications.
===========================================================
C Fixed a problem with tmpnam() in the Netware library in version
11.0c. New names were not being created.
===========================================================
C Fixed bug in Win32 write(). The zeropad function was not necessary
and didn't handle large files, in any case. Now you can seek to a
position > MAX_INT and then write().
===========================================================
C Fixed a problem where _beginthread example was crashing sometimes
===========================================================
C Fixed _chain_intr() so that flags is passed to interrupt handler
===========================================================
C Fixed 32-bit strcmp() so comparing unaligned strings does not fault
===========================================================
B Fixed a bug where an app was doing a chmod() on a file in a
directory and is supposed to remove the file and then delete
the directory itself. Under Win95 the directory was getting
removed, however under NT it was not.
Use div in place of ldiv for 32-bit code, since they should be
the same.
Marked the Product Version as 11.0b for the RTL DLLs, such
as CLBR110.DLL, CLBS110.DLL, MT7R110.DLL, MT7S110.DLL,
MTHR110.DLL, MTHS110.DLL, PLBR110.DLL & PLBS110.DLL,
so it is less difficult to distinguish them from older DLLs.
===========================================================
B Fixed a bug where Win386 DLLs would GPF every second time they
are unloaded.
To reproduce this,
modify the samples in samples\fortran\win\dll by adding the line
"call FreeLibrary( hlib )" before the line "FWinMain = 0" in
gen*.for. When you run the samples, they GPF the first, third,
fifth, etc. times when FreeLibrary is called. If you compile/link
these modified samples with 10.6a or earlier versions, then the
problem doc not occur. Reproduce this behaviour under WFW 3.11
and Win NT 4.0. Customer has reproed this under Win 95, and also
reproed it when the DLLs are called from VB 4.0.
===========================================================
B _wtof was missing from the 16-bit math libaries,
and the 32-bit version was returning erroneous results.
===========================================================
B Target: Win32: Using fmod() or modf() in code compiled with /br
was giving undefined references.
===========================================================
B Fixed a bug with itoa() in win16 apps, where you couldn't run
multiple instances of the app. If you tried to, you got
"Cannot start more than one copy of the specified program" under
NT and "Error: Cannot <something> multiple writeable data
segments" under Win 3.x.
===========================================================
B Win32 target only: feof() was not set when end-of-file occurs
on an input pipe. ferror() was being set instead.
===========================================================
B ftime() was not reporting correct timezone field in timeb struct
when TZ is negative.
===========================================================
B Overflow range error in pow was not reported unless /fpc used.
===========================================================
A _findfirst() has been changed to take a const char * instead of
just a char *.
===========================================================
A __FSU87 was trashing ecx - this routine is called to convert an
unsigned __int64 to a float.
===========================================================
A Fixed memory leak, due to us not deallocating the _iomode array
during fini rtns. Also added _UnloadCLib call to library to
allow user to properly unload 16 bit OS/2 user loadable DLLs.
===========================================================
A Fixed a bug where fortran default windowing apps would sometimes
appear to print lines twice, when printing at the bottom of the
screen. Since they were being printed at the bottom of the window
and then not erased when the window scrolled up, leaving a 2nd
copy at the bottom
===========================================================
A Input value range checking for strtod() has been improved for very
small values.
===========================================================
A The runtime dll support has been fixed to no longer leave a
potentially dangerous reference from the C runtime DLL into
whichever DLL has been most recently loaded into the process
image. The reference from the C runtime DLL now points
directly into the Math runtime DLL.
===========================================================
A The _dos_getdiskfree() function for 32bit platforms now has an
expanded data structure.
===========================================================
The assert() function for WIN32 and OS/2 platforms will attempt
to use stderr for output if it is available.
===========================================================
A The __declspec(thread) support for WIN32 platforms has been
improved. In some, pathological cases, it could lead to a GPF
on program startup.
===========================================================
A The system() function for WIN32 platform no longer passes
posix file handles for inheritance by child processes by default.
===========================================================
A The delay() function for NEC98 machines used to hang on
initialization.
===========================================================
A The race condition in the _beginthread() function related
to the saving of the child thread handle has been fixed.
===========================================================
A The multibyte init code for the C runtime library would
always crash on startup when running under the Pharlap
Run386 or TNT DOS extenders.
===========================================================
A The heapchk() function for 32bit platforms could, in some
cases, enter an infinite loop.
===========================================================
A The posix level open() function for WIN32 platforms did not
properly truncate existing files on NT server machines when
run from an NT workstation.
===========================================================
A The WIN32 stat() function now ensures that directories
cannot be marked as character mode devices.
===========================================================
A The WIN32 and OS/2 runtime shutdown code now does a better
job of releasing all resources on image shutdown.
===========================================================
******************
** C++ Compiler **
******************
C The 16-bit compiler now chooses the right default C library
when generating 16-bit multithreaded DLLs. Now
Selecting -bm -bd, generates a reference to CLIBDLL.LIB.
Selecting -bd, generates a reference to CLIBDLL.LIB.
Selecting -bm, generates a reference to CLIBMTL.LIB.
===========================================================
C The C++ compiler did not remember the "signedness" of constants
in enums and would, under the proper conditions, sign extend
an unsigned 64-bit constant.
===========================================================
C Fixed processing of floating-point command line switches.
/fp5, /fp6, floating point code generator switches would
reset /fpi87 model back to defaults and vice versa.
This meant poor floating-point code was generated.
===========================================================
C Fixed packing of structs when -zp16 is used and the
members are aligned to 8-byte boundaries to align
the class to an 8-byte boundary rather than a 16-byte
boundary.
===========================================================
C Fixed diagnosis of pointer comparisons for unrelated
classes. This change also affects the ?: operator
if there are two pointers in the ':' expressions.
Example:
struct A {};
struct B {};
bool fn( A *p, B *q ) {
return p != q;
}
===========================================================
C Fixed compiler to not force static functions to be
linkage "C++".
Example:
extern "C" {
static int fn()
{
return 0;
}
};
===========================================================
C Fixed a problem when a scope had more than approx. 25000
unique symbols in it. The symbol table code in the
compiler could not handle not growing the symbol table
to reduce the average search time.
===========================================================
C Added level 4 warning for switch statements that have
no case labels.
===========================================================
C Handling of const and reference members in a class had
problems when dealing with default op= member function.
Example:
struct NestedA {
NestedA();
~NestedA();
NestedA& operator=( const NestedA& s );
char* & _ptr;
};
struct NestedB {
NestedB();
~NestedB();
NestedB( NestedB& a );
void *pd_ptr;
};
struct NameValuePair {
NestedA x;
NestedB y;
};
int main( int argc, char** argv )
{
NameValuePair a;
NameValuePair b;
a = b;
return 0;
}
===========================================================
C Fixed sizeof( L"1234" ) to return 10 instead of 20.
===========================================================
C Fixed identical function checking to handle the
following case:
enum E { A,B,C };
struct test {
void foo( E );
void bar( E & );
};
void test::foo( E & ) { // error
}
void test::bar( E ) { // error
}
===========================================================
C Fixed a lexical lookup problem from within a member
function in a local class finding a symbol in the
host class. The compiler incorrectly thought that
'this' could be used to access the symbol.
Example:
struct ABC {
ABC() {
static struct B {
void f() {
meth2(); // error
}
} b;
}
void meth2() {
}
};
===========================================================
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
B fixed a bug where using /d2 /hd could cause the compiler to hang.
===========================================================
B fixed a C++ Preprocessor problem: where #if ( x > y ) could
produce incorrect results when x and y are expressions.
===========================================================
B An error was missing in the following case:
extern void f( int a, char *b );
extern void f( int a );
void *pf = f;
Work around: none
===========================================================
B Anonymous structs or classes within unions could not always
be initialized properly.
struct s
{
union
{
struct
{
float a, b;
};
float c[2];
};
};
s d = { 0.0, 0.1 };
Work around: Set values in object manually.
===========================================================
B Output a warning if a #endif isn't in the same source
file as its companion #if.
Example:
--- foo1.h ---
#ifndef FOO1
#define FOO1
#endif
#endif // warning
--- foo2.h ---
#ifndef FOO2
#define FOO2
#include "foo1.h"
#endif
--- foo.c ---
#include "foo2.h"
===========================================================
B A
/
D B
\ /
C
We no longer prefer the conversion from C->D over the conversion
from C->A as the number of levels of conversion does not matter
when D and A are not related.
===========================================================
B Added level 3 warning for unary '-' of an unsigned
operand (result type is still unsigned). Cast operand
to signed type to remove warning.
Example:
void bar( int );
void bar( unsigned );
...
// selects bar( unsigned )
foo( -2147483648 );
===========================================================
B Improved PCH reading of error message levels so that
header file changes are added to current message
levels rather than performing a complete replace of
the error message levels and ignoring any command
line adjustments.
===========================================================
B Fixed problem with -d2s that caused run-time error
"undefined constructor or destructor called!" to occur.
===========================================================
B Was not generating correct code for some default functions
in classes with modifiers.
Work around: write definitions for required constructors,
destructors, and operator = functions
===========================================================
B Was not generating correct code for the default operator =
when the class contained an array of elements where an element
could be byte-for-byte copied and also had virtual functions.
===========================================================
B Destruction sometimes was omitted following a delete which
followed a block closure which contained a destruction.
Work around: introduce a destructable temporary before
the delete.
===========================================================
B Fixed scanning of large strings with escaped characters.
Example:
char *p = "\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
\n";
Work around: break string up into smaller strings and
let compiler concatenate them
"1234567890" --> "12345" "67890"
===========================================================
B Added warning from scanner whenever a trigraph
is processed.
Example:
// string expands to "(?]?~????"!
char *e = "(???)???-????";
// work around:
char *f = "(" "???" ")" "???" "-" "????";
char *g = "(\?\?\?)\?\?\?-\?\?\?\?";
===========================================================
B Fixed analysis of shift operators with regard to
result type. Previously the result type was the
same as other binary arithmetic operators. Now
the result type is the promoted type of the left
hand operand.
Example:
int f( int x, unsigned s ) {
// should do signed right shift
return x >> s;
}
===========================================================
B Compiler incorrectly warned that new/delete operators
were declared in a namespace when they were declared
as friends of a class.
Example:
class N {
friend void *operator new( unsigned );
friend void operator delete( void * );
friend void *operator new[]( unsigned );
friend void operator delete[]( void * );
};
Work around: disable warning
===========================================================
B Compiler incorrectly diagnosed an invalid constant
when inside a preprocessing #if region that should
have been excluded from such errors.
Example:
#if 0
Version 35I63
#endif
Work around: put constant in a comment (if possible)
===========================================================
B Compiler now correctly evaluated all preprocessor
expressions involving binary operators of the same
precedence.
Example:
#if (0 < 2 - 1 + 3)
now correctly evaluates to TRUE. It previously
evaluated as if the expressions was
( 0 < 2 - ( 1 + 3) )
Note: this bug only occurred in preprocessor expressions.
===========================================================
B Compiler now initializes member pointers at link-time
in more cases than before (notably array initialization).
===========================================================
B Constant folding of 64-bit arithmetic would incorrectly
warn about overflow if the expression involved two 32-bit
quantities multiplied together to produce a 64-bit quantity.
===========================================================
B wpp: -zff and -zgf now generate code that doesn't save
fs/gs in the prologue/epilogue of the function (matches
behaviour of C compiler and ds/es). The pop of fs/gs
would fault if the selector had been freed.
===========================================================
B Fixed error recovery for the following code fragment:
template <class T : public Base > struct S {};
===========================================================
B wpp: optimized -3 code to use size override prefixes
when dealing with push and mov immed instructions.
===========================================================
B Under several combinations of options ?: did not generate
proper code to select static member functions.
typedef void (*void_func)();
class A
{
public:
static void f();
static void g();
};
void_func func(bool b)
{
return b ? A::f : A::g;
}
Work around: Avoid use of ?:, for example,
void_func func(bool b)
{
if( b )
return A::f;
else
return A::g;
}
===========================================================
B Fixed a problem where the compiler went into an infinite
loop generating Dwarf debug information with namespaces
that contained typedefs referencing types in other
namespaces.
Work around: use -d3 instead of -d2
Example:
class A {
public:
virtual ~A() {}
};
class B {};
namespace N {
class C {};
typedef B T;
class D {
public:
virtual ~D() {}
};
class E : public D, public A {
public:
E() {}
B* getB() {
return 0;
}
C* getC() {
return 0;
}
};
}
===========================================================
B Fixed a problem where function template instantiations
were not being set to C++ linkage.
Work around: don't use function templates in extern "C"
blocks or functions
Example:
template <class T>
void tf(T) {
return;
}
struct A { } a;
struct B { } b;
extern "C" void bar() {
tf(a);
tf(b);
}
===========================================================
B Allow bool op= bool expressions
Work around: break up expression A op= B into A = A op B
Example:
void foo( bool a, bool b ) {
a |= b;
}
===========================================================
B Fixed compiler GPF in situations where an abstract class
tries to create or return itself. The GPF was caused by
the compiler trying to output a good error message with
all the unimplemented abstract methods.
Example:
class A {
virtual ~A() { }
virtual void *fn( char *name ) = 0;
A Next() { return( _next ); }
};
void foo( A *it )
{
it->Next();
}
===========================================================
A Fixed a minor bug that caused spurious warnings to be
generated for pre-compiled headers containing integer
constants.
The following example, if used in a pre-compiled header,
would cause a warning about truncating integer constants:
class Foo {
public:
int Bar(int, int=1); // warning generated here
};
===========================================================
A Was mis-diagnosing conversions from types of the form
Type cv1 * cv2 &
to types of the form
Type cv3 * cv4 &
when cv3,cv4 are more qualified than cv1,cv2 respectively
and cv4 does not contain "const" (it must for the
conversion to be legal).
Work around: none, the conversion is illegal.
===========================================================
A Changed the alignment of doubles and long doubles to be
on 8-byte boundaries when not optimizing for space. This
will increase performance on many hardware configurations.
===========================================================
A Incorrect code was being generated for "?:" sequences
when the target is a class object and when the expression
between the "?" and the ":" was converted to the type of
the expression following the ":"
work around: cast the expression between the "?" and the
":" to the type of the expression following
the ":"
example:
struct Cls {
Cls( int );
Cls( Cls const & );
};
extern Cls target;
void foo( bool test, int int_val, Cls const & class_val )
{
target = test ? int_val : class_val; // generated bad code
}
The work-around is to re-code foo as follows:
void foo( bool test, int int_val, Cls const & class_val )
{
target = test ? Cls( int_val ) : class_val;
}
===========================================================
A When the -za switch is not specified (i.e., when
extensions are enabled) the compiler was extended to
accept as member pointer values, class-qualified and naked
non-static member functions. The proposed standard
requires that & precede a class-qualified name.
struct S {
int foo( float );
};
int (S::*mp)( float ); // a member-pointer variable
...
// the following are all accepted:
mp = &S::foo; // standard
mp = S::foo; // extension
mp = foo; // extension (must be in scope)
===========================================================
A Fixed a bug that caused the compiler to crash under certain
conditions when writing a pre-compiled header.
===========================================================
A Fixed compiler so that floating point support is loaded
if you call a routine with the address of a double.
This is req'd if you need to skip floating point numbers
but never use them.
e.g.,
scanf( "%d %f %d\n", &i1, &d1, &i2 );
===========================================================
A Fixed compiler so that -dXXX="a-/ b" is allowed.
Compiler was terminating -d macro definition at
a -, /, or white space.
===========================================================
A Fixed problem where a MI conversion was required before
initializing a const reference temporary.
Example:
struct A { int a; };
struct C { int c; };
struct B : public C, public A { int b; };
typedef A * T;
T check;
struct Array {
void Append( const T & t ) { if( t != check ) _fail; }
void Remove( const T & t ) { if( t != check ) _fail; }
};
void Foo( B * b )
{
Array arr;
A * a = b;
arr.Append( a );
arr.Remove( b );
}
int main()
{
B b;
check = &b;
Foo( &b );
_PASS;
}
===========================================================
A Fixed problem where direct calls to __stdcall dtors
were incorrectly routed through a calling convention
thunk normally used for table-driven destruction.
===========================================================
A When generating preprocessed output, the compiler now
eliminates empty lines if you do not want #line
directives.
===========================================================
A Correctly handle multibyte characters with the second
byte equal to 0x5c ('\\') when they terminate a C++
//-style comment (i.e., do not treat them as a line
splice).
Example:
// <0x81><0x5c>
===========================================================
A A function that calls setjmp will have its local
variables marked as "stay in memory" but this
attribute incorrectly affected function template
generic type binding.
Example:
#include <setjmp.h>
template <class T>
void delete_object( T*& object ) {
if( object ) {
delete object;
object = NULL;
}
}
struct CValue {
int i;
};
void foo() {
CValue *v;
jmp_buf b;
setjmp(b);
delete_object(v);
}
===========================================================
A Fixed problem with C++ empty base optimization that
caused spurious errors to be diagnosed.
Example:
struct CClassBase {
};
struct CClass2 : public CClassBase {
struct CClass1 {
CClass1(int) {}
};
CClass1 m_c;
protected:
CClass2(void);
};
CClass2::CClass2(void)
: m_c(1) {
}
===========================================================
A Fixed problem with macro expansion that triggered
boundary conditions in the compiler which in turn
caused incorrect macro expansion.
Example:
#define example( b ) b ## _X Y_ ## b ## _Z
example( x123456789012345678901234567890 )
example( x12345678901234567890123456789 )
example( x1234567890123456789012345678 )
example( x123456789012345678901234567 )
example( x12345678901234567890123456 )
#undef example
===========================================================
A Fixed problem with error recovery in complex
source code with __stdcall classes.
===========================================================
A Return expressions with comma operators sometimes were compiled
incorrectly.
This resulted in a bad library for multi-threaded Netware when
exceptions were used.
Work around: assign the expression to a temporary and then
return the temporary.
example:
int x;
void foo( int y ) {
return ( x = 1 , y + 1 );
}
replace by:
int x;
void foo( int y ) {
int temp = ( x = 1 , y + 1 );
return temp;
}
===========================================================
A If a source file doesn't end in a new-line, the C++
compiler now compensates for this to allow new-line
terminated preprocessing directives to work properly.
Example:
#define C 3 // file doesn't end in '\n'
===========================================================
A Incorrect code was generated for an argument to an ellipsis
function (one declared with '...' ) which was computed as an
lvalue class value for a destructible class.
Example:
void foo( int, ... );
class S {
. . .
~S();
. . .
};
S* p1;
S* p2;
bool b;
. . .
int i = foo( 1997, b ? *p1 : *p2 );
Work around: use a cast to force underlying expressions
to be rvalues:
int i = foo( 1997, b ? (S)*p1 : (S)*p2 );
===========================================================
A Compiler would crash when it could not generate RTTI
info into a 64k segment (only applies to 16-bit targets).
The error was reported properly but recovery resulted
in a memory fault in the compiler.
===========================================================
A Compiler would crash (infinite loop or page fault) when
inlining functions that contained certain usages of
anonymous unions.
Example:
inline int ii( int i ) {
union {
int x;
unsigned char y;
};
x = 0;
y = i;
return x;
}
...
ii( q );
Work around: #pragma inline_depth(0)
===========================================================
A Tweaked scanning of pp-number tokens in non-ISO/ANSI mode
so that old code continues to compile correctly.
Example:
#define A10 3
#define A11 0x1e+A10
int v = A11; // 0x1e + 3
===========================================================
A Added -mfi option to indicate to the compiler that interrupt
functions can assume the flat memory model is preserved.
If this option is not used, interrupt functions have to
assume that a different stack segment is being used and
so auto data must be manipulated as far data.
===========================================================
A Fixed diagnostic of 'void' expression types in certain
contexts.
Example:
void a();
int __u( int i ) {
return i == a() || a() == i;
}
===========================================================
A Added diagnostic to identify cases where the calling
convention of a virtual function override has changed.
Example:
struct B {
void __stdcall foo( int, int );
};
struct D : B {
void foo( int, int );
};
===========================================================
A A function such as
Composed* ctor( Composed const & src )
{
AnotherDtorable stuff_1;
AnotherDtorable stuff_2;
AnotherDtorable stuff_3;
Composed* ptr = new( some_data ) Composed( src );
return ptr;
}
where AnotherDtorable and Composed are destructable objects
could cause the object located by ptr to also be destructed
under some combinations of options.
Work around: place the new statement in a separate function.
===========================================================
A The following code generated a spurious warning, claiming that
fn was unreferenced.
extern void import( const void * );
static void fn() {}
void external()
{
const void * foo = fn;
import( foo );
}
Work around: ignore that warning or disable it
===========================================================
A Diagnose extra initialization arguments for parenthetical
initialization of non-class types.
Example:
int h(1);
int f(1,2,3);
int g( int(1,2,3) );
foo() {
int q = 1, // <- notice comma
f(1,2,3);
}
===========================================================
A Diagnose definition of member functions that are not
declared but match the signature of another member
function with default arguments.
Example:
struct A {
void f1( int, bool = false );
};
void A::f1( int ) { // error
}
===========================================================
A Corrected problem where a inline template function
was incorrectly diagnosed as undefined if it was
inside a namespace.
Example:
namespace alpha {
template <class T>
inline T & f (T & a) {
return a;
}
inline long b ( long a ) {
return f ( a );
}
}
void fn( void ) {
long a = 100;
long c;
using namespace alpha;
c = b ( a );
}
===========================================================
A Corrected problems where certain class hierarchies
caused problems in generating construction/destruction
code or exception handling state tables. The problems
manifested themselves as incorrect code/data or compiler
faults.
Example:
#include <fstream.h>
#include <stdlib.h>
#include <iostream.h>
class TextFile {
public:
ifstream solidTextFile;
};
class SolidTextFile : public TextFile {
};
void main() {
SolidTextFile aFile;
}
===========================================================
A Corrected problem where, in copy initialization, a
user-defined conversion function from source class to a
non-const reference of the target class would not be
preferred over another ambiguous conversion.
In this example, the conversion A::operator String() going
to String::String( String const & ) should be preferred over
the ambiguous use of the String::String( char ) constructor
from either A::operator int() or A::operator float().
Example:
struct String {
String();
String( char );
};
struct A
{
operator String() const;
operator int() const;
operator float() const;
};
struct B
{
const A& GetitsA();
};
void foo(B b)
{
String s;
s = b.GetitsA();
}
===========================================================
A Fixed reading and writing of the precompiled header
file when it contained C++ EH information for classes.
===========================================================
*****************
** C++ Library **
*****************
C eofbit for ifstream's is now set on a read() when at EOF
===========================================================
C Fixed buffer overrun when specifying a precision (SetPrecision)
greater than LDBL_DIG. This used to cause an application to
crash Windows 95.
===========================================================
C Added conditional semaphore unlock to the destructor of a "lock"
object.
===========================================================
******************
** Disassembler **
******************
C Fixed WDIS so that it correctly disassembles 32-bit code
assembled with MASM/TASM as 32-bit and no longer as 16-bit
===========================================================
C Fixed ORL library so that additional OMF THEADR records in
object files are not diagnosed in error. Additional THEADR
records occur when #include'ing source code and requesting
Codeview debug info.
===========================================================
B wdis couldn't recognize "SHLD EDX,EAX,CL", "SHRD EDX,EAX,CL"
and a few other instructions.
===========================================================
B Wdis did not give the correct code when disassembling memchr().
It placed the label in the wrong position.
This is because the code makes a jump into the
middle of an opcode sequence depending on the result of memchr().
WDISASM with 10.6 "knew" about this and issued DB instructions.
===========================================================
A fixed problem with disassembly of 3-operand imul instructions
(only 2 operands were displayed)
===========================================================
*******************
** Documentation **
*******************
C Fortran subroutine library functions FNEXTRECL() and FTRACEBACK()
are now documented
===========================================================
C Predefined C++ macros _CPPUNWIND & _CPPRTTI are now documented
===========================================================
C #pragma read_only_file which appears in nearly all Watcom header
files is now documented.
The default depth for #pragma inline_recursion has been corrected.
The default depth is 3.
===========================================================
C Functions
_dieeetomsbin(),
_dmsbintoieee(),
_fieeetomsbin(),
_fmsbintoieee(),
_findfirsti64(),
_findnexti64(),
_wfindfirsti64(),
_wfindnexti64(),
_filelengthi64(),
_lseeki64(),
_telli64(),
_fstati64(),
_wfstati64(),
_stati64(),
_wstati64()
are now documented in the C library.
===========================================================
B Fixed the C library matherr example, so it works with the C++
compiler.
===========================================================
B Watcom 10.6 aligns structure members on a byte boundary by
default.
Watcom 11.0 aligns structure members on an 8 byte boundary
by default.
Fixed some places where the documentation hadn't been updated
from 10.6.
===========================================================
B Added - wlink's OPTION SHOWDEAD, which was not documented.
This option is very useful as it shows in the map file which
functions the linker stripped out.
===========================================================
B Added documentation for wcc/wcc386/wpp/wpp386 options /of & /of+.
===========================================================
B Corrected the Programmer's Guide sample on 32-bit OS/2 DLLs.
The dllsamp.c file was missing a: define EXTERNC.
===========================================================
B Upated Linker docs indicate that incremental linking is not
supported for 16-bit DOS and NetWare targets.
===========================================================
**********************
** Graphics Library **
**********************
C Fixed a bug where vector fonts were being drawn incorrectly
===========================================================
C Now cache the SVGA Page for better performance
===========================================================
C Fixed a bug in NEC version of graphics library "SetPixel" function.
===========================================================
C Fixed a bug in _EGAScanRight. The ODD/EVEN mode bit should not have
been turned on. On most adapters, this didn't cause a problem.
On a Number Nine video card, this showed up as a problem in flood
filling an area.
===========================================================
********************
** C Header Files **
********************
C Fixed headers <typeinfo.h>, <exceptio.h> so that they include
other Watcom C++ headers with the .h extension correctly. This was
causing STLPort's headers to be used in preference to Watcom's.
===========================================================
C Fixed getc macro in stdio.h. The '\0x' changed to '\x' in two
places. Old version resulted in a loss of an attempted
optimization. The correction will result in better performance
for getc().
===========================================================
C Added Microsoft's FLT_NORMALIZE constant.
Added Microsoft's _DBL_RADIX constant.
Added Microsoft's _DBL_ROUNDS constant.
Added Microsoft's _LDBL_RADIX constant.
Added Microsoft's _LDBL_ROUNDS constant.
Added Microsoft's DBL_RADIX constant.
Added Microsoft's DBL_ROUNDS constant.
Added Microsoft's LDBL_RADIX constant.
Added Microsoft's LDBL_ROUNDS constant.
Changed FLT_MIN_EXP from (-127) to (-125).
Changed DBL_MIN_EXP from (-1023) to (-1021).
Changed LDBL_MIN_EXP from (-1023) to (-1021).
Changed FLT_MIN_10_EXP from (-38) to (-37).
Changed FLT_MAX_EXP from 127 to 128.
Changed DBL_MAX_EXP from 1023 to 1024.
Changed LDBL_MAX_EXP from 1023 to 1024.
Added accurate representations for DBL_MAX, DBL_EPSILON and
DBL_MIN named _DBL_MAX, _DBL_EPSILON and _DBL_MIN.
===========================================================
C Improved code generated from isxxx() functions.
Changed description of messages associated with some errno values.
Added definition of NULL to float.h.
Added prototypes for _strerror(), _wcserror(), _doserror(),
_wdoserror() to string.h.
===========================================================
A const qualifiers have been added to the char* parameters
to the findfirst and variant functions in io.h
===========================================================
A The register mode calling convention prototype for longjmp()
is no longer marked as "#pragma aborts" to facilitate
profiling support.
===========================================================
**********************************************
** Integrated Development Environment (IDE) **
**********************************************
C Fixed incorrect access of C error/warning help file
WCCERRS.HLP (messages were one out)
===========================================================
A Added pentium pro (p6) switches to the options pages
( compiler, linker, assembler, etc. )
===========================================================
A added a switch for Watcom debugging info to the linker
options page - watcom was previously the default if you
selected debug all, now Dwarf is the default
===========================================================
A fixed a resource problem that was causing some of the
buttons and menu items to appear with no text
===========================================================
A Don't use incremental linking for DOS or Netware
applications - it is not supported
===========================================================
A Changed the compiler options for Netware targets to use
-5s, -ms -- stack based, small model
===========================================================
A changed the linker options for 32-bit OS/2 DLL's
now uses op manyautodata, initinstance, terminstance
===========================================================
***************
** Librarian **
***************
C Updated command line help for WLIB /?
Help added for switches -p, -s, -v
===========================================================
C Wlib overwrote an existing object file with no truncation (in the
"*" extract operation). This resulted in a corrupt object file
when the new one was shorter than the old one.
===========================================================
C Fixed some problems related to creating AR format libraries
using the -fa switch.
===========================================================
B Wlib wasn't giving a warning message if you tried to extract
a nonexistent object file.
===========================================================
************
** Linker **
************
C Fixed problem where WLINK was inserting random text
(often parts of WLSYSTEM.LNK) in the final executable
===========================================================
C Fixed WLINK so that it now works interactively again
===========================================================
C Added support for case-insensitive searching of COFF (AR-format)
libraries. For example, the linker now matches _SLEEP@4 with
_Sleep@4 in KERNEL32.LIB.
===========================================================
B Fixed output of QNX executables for a rare case of
internal buffer filling.
===========================================================
B OP INC IS NOT SUPPORTED FOR 16-BIT DOS OR NetWare,
in 11.0 you didn't get an error to indicate this
===========================================================
B fixed a bug where
"wlink debug watcom types" or
"wlink debug watcom locals" or
"wlink debug watcom lines"
would all cause the linker to crash
"wlink debug watcom all" was fine
===========================================================
B NT linker was crashing if you ran it with no arguments, and
typed something at the WLINK> prompt
===========================================================
B fixed a bug where WLINK was crashing while trying to link an app
with codeview debuggin info
===========================================================
**********
** Make **
**********
A In non-Microsoft mode, WMAKE will find and process
a file named "MAKEFINI" after all makefiles have been
processed.
===========================================================
***********************
** Resource Compiler **
***********************
C Added support for CodePage 1250 to UNICODE translation (1250.UNI).
===========================================================
**************
** Debugger **
**************
B dwarf dip now exits gracefully if it failes to load debug info
===========================================================
B Fixed a bug on DOS or Win95 Host:
binw\wd was crashing on loading DOS/4GW EXE.
The debugger was running out of memory trying to read in a large app
or large app + symbolic debugging info (.SYM) file.
Problem did not occur with the binnt debuggers under NT.
===========================================================
B binw\wd was crashing when inspecting ofstream structure with
Watcom or Codeview debugging information.
===========================================================
B Debugger was crashing when double-clicking on an entry in calls window.
===========================================================
B If winserv terminated abnormally for any reason, you could not
restart it unless you gave the server a different name. This is a
bigger problem than appears at first, because the IDE uses an
unnamed debug server. As such, if you were debugging DOS/4GW
under Windows 95 and the application crashed the server, then you
had to reboot before you can debug in the IDE to start the debugger
again. Winserv will now free the name and try again if it tries
to connect to a server and is unable to connect.
===========================================================
A Rolled back DOS4G extender to 1.96 to fix pharlap application
debugging crashes.
===========================================================
A fixed a bug where you couldn't debug "Large" DOS/4GW apps
===========================================================
***************
** Assembler **
***************
C Conditional move instructions for Pentium Pro were being assembled
back to front
===========================================================
C Fixed message numbers so that they increase sequentially from 1
and from 500 in each of the two groups of messages. Previously,
message numbers had large gaps in them.
===========================================================
B Fixed a bug where wasm wouldn't assemble:
"psrlq m1, dummy"
where dummy is a quadword
It gave an error: "Second operand too big".
===========================================================
*********************
** Watcom Profiler **
*********************
C Fixed "Out of Memory" error when sample file has no samples.
Fixed disassembly error in display of location counter (eip/ip).
===========================================================
*********************
**** Clone Tools ****
*********************
C Fixed CL & CL386 so that switches -MD or -MDd are translated as
the equivalent Watcom switch -br. Previously no translation
was occuring. For the real Microsoft tools, the switches means
using the Run-Time Libraries in DLL form. Correcting this means
the equivalent Watcom Run-Time Libraries in DLL form will be used.
===========================================================
Changes in 11.0 that may Require Recompilation:
-----------------------------------------------
clock()
The clock function accuracy has changed from 100 ticks per second to
1000 ticks per second (i.e., CLOCKS_PER_SEC has changed). Source code
that uses the clock function and CLOCKS_PER_SEC in its calculations
must be recompiled before linking the application with new libraries.
Major Differences from Version 10.6:
------------------------------------
The following sections summarize the major differences from the
previous release of Watcom C/C++.
In general, we have improved Microsoft compatibility in our compilers
(more warnings instead of errors, support for MS extensions, etc.)
and tools. Some of the Win32 and 32-bit OS/2 versions of our tools
are now available in DLL form.
EXE DLL Description
------ ------- -----------------------
wcc wccd 16-bit x86 C compiler
wcc386 wccd386 32-bit x86 C compiler
wpp wppdi86 16-bit x86 C++ compiler
wpp386 wppd386 32-bit x86 C++ compiler
wlink wlink Watcom Linker
wlib wlibd Watcom Library Manager
This provides better performance when using the Integrated Development
Environment or Watcom Make. See the description of the !loaddll
preprocessing directive in Watcom Make for more information.
Changes to the C++ Compiler for 11.0
------------------------------------
We have added support for namespaces and RTTI (Run-Time Type
Identification).
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the C Compiler for 11.0
----------------------------------
We have improved (faster) pre-compiled header support.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Code Generator for 11.0
--------------------------------------
A new optimization, "branch prediction", has been added. This
optimization is enabled by the "ob" or "ox" compiler options.
The code generator tries to increase the density of cache use by
predicting branches based upon heuristics (this optimization is
especially important for Intel's Pentium Pro). We have added
Multi-media Extensions (MMX) support to the in-line assemblers.
We have added "long long" (64-bit integer) support in the form of
a new __int64 type.
Changes to the Compiler Tools for 11.0
--------------------------------------
The Watcom Linker supports incremental linking.
The Watcom Library Manager (WLIB) can now understand COFF and ELF
format object files, as well as OMF et al. The Watcom Library
Manager can now read/write AR-format (Microsoft compatible),
Multilib (used by IBM for PowerPC version of OS/2), or old-style
OMF libraries. The default output format is AR-format and this can
be changed by switches. The Watcom Library Manager can output various
format import libraries.
We have added Multi-media Extensions (MMX) support to the Watcom
Assembler (WASM). A new version of the Watcom Disassembler (WDIS)
is included. It can process ELF, COFF or OMF object files and ELF,
COFF or PE format (Win32) executables.
The old disassembler (WDISASM) has been retired and is not included
in the package.
We have added new tool front-ends that emulate Microsoft tools.
These are:
nmake
cl
link
lib
rc
cvtres
mapsym
These programs take the usual Microsoft arguments and translate them,
where possible, into equivalent Watcom arguments and spawn the
equivalent Watcom tools.
Watcom Make now processes Microsoft format makefiles when the "ms"
option is used.
Changes to the C/C++ Libraries for 11.0
---------------------------------------
We have added multi-byte and wide character (including UNICODE)
support to the libraries.
We include run-time DLLs for the C, Math and C++ Libraries.
We have added Multi-media Extensions (MMX) support to the libraries.
The following new functions were added to the library...
mb functions
The clock function accuracy has changed from 100 ticks per second
to 1000 ticks per second (i.e., CLOCKS_PER_SEC has changed).
Changes to the DOS Graphics Library for 11.0
--------------------------------------------
The graphics library now performs the VESA test before testing for
vendor specific graphics cards. This fix is intended to broaden
the number of graphics cards that are supported.
For details on what was new in versions 10.6 and earlier, see the
GETTING STARTED helpfile.
Other notes:
Note: %DstDir% represents the directory in which WATCOM C/C++ was installed.
%WinSysDir% represents your Windows 3.x system directory.
1. When debugging a 32-bit Phar Lap, TNT or DOS/4GW application, make sure
that "run386.exe", "tnt.exe", or "dos4gw.exe" respectively, are in your
path. Failure to do so, may cause your computer to hang.
2. When using the GUI debugger to debug Windows 3.x applications, certain
Windows applications may cause the debugger to behave in an unpredictable
way. Typically, this occurs when debugging certain messages in window
callback functions. For example, hitting a breakpoint in a window
function that is processing a WM_INITDIALOG message will crash the system.
If this happens, the character-mode version of the debugger should be
used.
3. In order to use CodeWright with our IDE, you will need to change the
"cwright.ini" file. This file contains the following line.
;LibPreload=cwdde.dll
Uncomment this line by removing the ';' character. This is required to
enable communication between the IDE and CodeWright when "weditcw.dll"
is selected as the editor interface DLL from the IDE.
4. If you choose to not install help files onto your hard disk, you will not
be able to get help on the C library or MFC library from the editor.
5. Parallel remote debug servers now work in an OS/2 session.
6. When configuring the browser to use the CodeWright editor interface, you
must specify "weditcw.dll" as the editor DLL, save the new options, exit
the browser, and restart the browser. Failure to do this will cause an
exception to occur in the CodeWright interface DLL.
7. Under OS/2, if you are debugging a DOS application from the IDE, you
must ensure that %DstDir%\binw is in your DOS path so that when the IDE
starts a DOS session to debug your application, the remote server can find
its support files.
8. Under OS/2, you must ensure that the "Comet cursor" desktop setting is
disabled if you want to debug PM applications. By default, this setting
is disabled.
10. The OS/2 Resource Comiler ( RC.EXE ) does not work correctly if the
directory which contains RC.EXE occurs too late in your PATH environment
variable ( > 250 characters ). If you experience problems with RC.EXE,
you should change the PATH environment variable in your CONFIG.SYS file,
by moving %WATCOM%\BINP and %WATCOM%\BINW earlier in the path. |
Add new comment