home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / SC651PCH.DMS / in.adf / sc651pch.lha / Read.Me < prev    next >
Encoding:
Text File  |  1994-01-17  |  16.1 KB  |  467 lines

  1.  
  2.  Copyright (c) 1992-1994 SAS Institute, Inc, Cary, NC
  3.  All Rights Reserved
  4.  
  5.  This document describes bug fixes and enhancements made in the 6.51
  6.  release of the SAS/C Development System for AmigaDOS.    To install 
  7.  the 6.51 patch, you must have version 6.50 of the SAS/C Development
  8.  system installed.
  9.  
  10.  If this update does not fix a problem that you have been having, 
  11.  please contact our Technical Support Division for help as soon as 
  12.  possible.
  13.  
  14.  All reproducible reported CXERRs, Enforcer hits, and cases of bad
  15.  code are fixed with each release.  If you get one of these, please 
  16.  contact technical support immediately.  It will help if you have a
  17.  compilable test case.  See chapter 3 of the User's Guide, Volume I 
  18.  for information on how to contact technical support and what 
  19.  information to provide.
  20.  
  21.  In addition to the specific bugs listed, several code generation 
  22.  bugs were fixed in the optimizers and the code generator (sc2).  
  23.  Since the code generation bugs did not affect most people, and they
  24.  are not easy to describe or reproduce, we will not describe them 
  25.  individually here. We suggest that you recompile all your code if 
  26.  it is behaving strangely. Please report all enforcer hits and 
  27.  CXERRs to technical support.
  28.  
  29.  Also note that not all executables and shared libraries have been
  30.  modified. Those that have not been modified keep their old version 
  31.  number (6.50).  This is normal.  A list of modified files appears 
  32.  at the end of this document.
  33.  
  34.  ***************************** IMPORTANT ***************************
  35.  
  36. 1. The layout of bitfields was inadvertently changed between 6.0 and
  37.    6.50, which meant that structures containing bitfields were 
  38.    incompatible between the two versions.  Bitfields have been 
  39.    changed back to the 6.0 method, with the exception of bitfields 
  40.    of size :0.    :0 bitfields exhibited a bug in 6.0-6.3 and added 
  41.    extra unusable bytes to the structure.  6.50 bitfields do not 
  42.    add these extra bytes.
  43.  
  44. 1. The __stack external variable sets the minimum stack size for 
  45.    your program, as documented in the Library Reference Manual and 
  46.    elsewhere.  However, if you use it, you must set __stack to an 
  47.    even multiple of 4 bytes or risk having your machine crash.
  48.  
  49. 2. Many users have inquired about the Quick Reference Guide for 
  50.    6.50.  There is no new Quick Reference Guide in 6.50; the 6.0 
  51.    guide is shipped to all new 6.50 customers, and customers who 
  52.    are upgrading should continue to use their old Quick Reference 
  53.    Guide.
  54.  
  55. 3. Many users have asked about disk 6 in the installation process.  
  56.    Disk 6 is used only if you do the floppy installation; hard disk 
  57.    users do not need this disk.
  58.  
  59. 4. The compiler now defines a preprocessor symbol __AMIGADATE__.  
  60.    This preprocessor symbol resolves to a datestamp string in the 
  61.    format required for the AmigaDOS VERSION command.  The format is 
  62.    "(dd.mm.yy)", where dd is the day (1-31), mm is the month (1-12),
  63.    and yy is the year. __AMIGADATE__ is available from both C 
  64.    and C++.
  65.  
  66. 5. The macros for some functions defined in the C header files, are 
  67.    now not defined if compiling C++.  They conflicted with the names
  68.    of some member items of C++ classes in <iostream.h> or 
  69.    <complex.h>.    Problem functions are <string.h>/index(), 
  70.    <math.h>/min(), max(), <fcntl.h>/open(), read(), write(), 
  71.    close(), <stdlib.h>/abs().  Many of these have alternate names 
  72.    using preceding underscores that can be used instead.
  73.  
  74. 6. The priority of the autoinit functions for utility.library and 
  75.    the various Commodore math libraries has been changed to 100 
  76.    (from 250).  This allows the autoinitializer for the SPROF 
  77.    profiler code to use utility.library if it is compiled with 
  78.    UTILLIB.
  79.  
  80. The following describe problems and bugs that have been addressed 
  81. in the 6.51 release.
  82.  
  83. =============================
  84. Library and Header Changes
  85. =============================
  86.  
  87. COMMON global variables were not set to zero as expected in all 
  88. cases.
  89.  
  90. Source code to the file _iob.c, needed for stdio initialization, 
  91. was not shipped as planned.
  92.  
  93. The function scdir() did not work when called twice in a row.
  94.  
  95. #including <unistd.h> from C++ gave an error because the C++ keyword
  96. "template" was used as a parameter name in a prototype.
  97.  
  98. Various header files contained macro defines for abs, min, max, etc.
  99. that conflicted with class member names in C++.  These macros are 
  100. now no longer defined when compiling C++.
  101.  
  102. C++ iostream library was not handling bytes with the value 0xff 
  103. correctly.
  104.  
  105. __autoopenfail was modified to catch an error situation, to simplify
  106. the code, and to have it set return codes correctly.
  107.  
  108. ctime() was not calculating leap years correctly in all cases.
  109.  
  110. __stdargs version of SetRexxVar() was not working.  It always 
  111. returned an error code of '9' (string too long).
  112.  
  113. The __stack external variable did not work when programs linked with
  114. cback.o were run from WorkBench.
  115.  
  116. UNIX-style error codes (errno codes) were cleaned up to be more 
  117. accurate.
  118.  
  119. The file <sys/commwben.h> generated warning 148 (incomplete struct 
  120. tag) if compiled with the STRICT or WARN 148 options.  #pragmas have
  121. been added to suppress this warning.
  122.  
  123. Executable names longer than 7 characters trashed part of the 
  124. __stdiov37 string and caused the console window that opens to handle
  125. stdio under workbench to close immediately, rather than waiting for 
  126. the user to click the close gadget.
  127.  
  128. __tzset() did not free allocated memory until the program exited.
  129. This caused problems for programs that run a long time and call 
  130. __tzset() repeatedly.
  131.  
  132. dfind/dnext incorrectly modified fib_FileName.    The field was 
  133. converted to all lower case.
  134.  
  135. _main.c did not handle arguments containing a starting quote but no
  136. closing quote correctly.
  137.  
  138. _main.c defined ESCAPE to be '\027' when it should have been '\033'.
  139.  
  140. dfind()/dnext() did not work correctly on drives formatted with the
  141. directory-caching file system.    This caused the "grep" utility to 
  142. fail on these drives as well.
  143.  
  144. _CXD33 routine called the Commodore unsigned divide routine rather 
  145. than the SAS/C provided signed routine.
  146.  
  147. repmem() did not work in programs compiled with PARM=R.
  148.  
  149. UNIX compatible functions did not always return -1 on failure.    
  150. While this is legal according to the UNIX documentation, which says
  151. any nonzero value is OK, many UNIX programs depend on -1 
  152. specifically.  Changed functions were unlink(), rename(), remove(), 
  153. system(), setvbuf(), putenv().
  154.  
  155. __fpinit() did not use an autoinitializer to initialize the math
  156. coprocessor, if present.
  157.  
  158. __fpinit() did not check for the presence of a math coprocessor 
  159. before issuing math coprocessor instructions.
  160.  
  161. __stdargs signal handlers did not get parameters passed to them 
  162. correctly.
  163.  
  164. assert() macro now explicitly casts its argument to int.
  165.  
  166. fgetc(), fcloseall(), fdopen(), fread(), and flushall() referred to 
  167. stdio and therefore linked in the stdio autoinitializer when called.
  168.  
  169. fseek() did not work if you did a seek to SEEK_END after reading or
  170. writing earlier in the file.
  171.  
  172. scanf() did not always return the number of arguments parsed 
  173. correctly.
  174.  
  175. The builtin versions of strcmp() and memcmp() were doing signed
  176. comparisons instead of unsigned comparisons.
  177.  
  178. The restriction on the number of arguments to the program has been
  179. removed.
  180.  
  181. The formal parameter name, "template", in mkstemp() and mktemp() has
  182. been changed to "template_arg" because template is a C++ keyword.
  183.  
  184. =====================
  185. CPR Debugger Changes
  186. =====================
  187.  
  188. The "break <ln> trace" command did not work as documented if the
  189. breakpoint was encountered while single-stepping.
  190.  
  191. CPR left a lock on the current directory upon exit when invoked from
  192. CLI.
  193.  
  194. Enforcer hits were generated when using the 'View/Modules' menu item
  195. and some other commands in a file with no debugging information.
  196.  
  197. CALL command sometimes did not work if >2 parameters were used.
  198.  
  199. CPR crashed if OpenDevice was called from a program outside of CPR's
  200. control.  (If you have been using the -nolib option to work around
  201. this problem, you can remove the option now.)
  202.  
  203. CATCH command did not work on tasks created outside of CPR's 
  204. control.
  205.  
  206. Starting CPR from WorkBench and giving the program extra arguments 
  207. could crash the machine upon exiting CPR.
  208.  
  209. CPR's mixed mode window repeated some source lines in some programs.
  210.  
  211. When displaying multidimensional array members of structures via a 
  212. pointer and using array slices, CPR displayed the data incorrectly 
  213. and generated Enforcer hits in some instances.
  214.  
  215. CPR could not correctly disassemble the DIVSL.L opcode.
  216.  
  217. Global variables from one module were not accessible in the watch
  218. window when in other modules under some circumstances.
  219.  
  220. The range option on the watch command displayed one element too few.
  221.  
  222. d (char)-1 (and some other casts) caused the message 
  223. "***floating point exception" from CPR.
  224.  
  225. ==============================
  226. Parsing and Diagnostic Changes
  227. ==============================
  228.  
  229. The C++ translator produced files with a .o extension instead of a
  230. .p extension when PPONLY was used.
  231.  
  232. The C++ translator failed to issue an error for using the 'new'
  233. operator on an abstract class type.
  234.  
  235. Compiler warned about different prototypes whose only difference was
  236. the use of the "signed" keyword on int, short, or long variables.
  237.  
  238. Even with the nomultipleincludes option turned on, SC would include
  239. a header twice if the second include is in a different case than the
  240. first.
  241.  
  242. Compiler did not complain when you tried to pass a structure in a
  243. register to an __asm function.
  244.  
  245. The compiler was suppressing all errors and warnings to the console
  246. if SCMSG was shut down during a compilation.
  247.  
  248. SC driver did not accept '.cc' file extensions for C++ files.
  249.  
  250. Internal error in C++ when you defined the preprocessor symbol
  251. __cplusplus on the command line.
  252.  
  253. C++ translator defined the preprocessor symbol __SASC__ instead of
  254. __SASC to identify the compiler.  The C compiler defines the latter.
  255.  
  256. IGNORE, ERROR and WARN had no effect on C++.
  257.  
  258. SC only allowed a maximum OPTDEPTH of 6.  This has been changed to
  259. 255. Please use this option and OPTRECURDEPTH sparingly, since
  260. excessive recursive inlining can increase the size of your program 
  261. dramatically.
  262.  
  263. ====================================
  264. Code Generation/Optimization Changes
  265. ====================================
  266.  
  267. The allocation rules for bitfields were different in 6.50 than in 
  268. 6.3, rendering structures with bitfields written by programs 
  269. compiled with 6.3 unreadable with 6.50, and vice-versa.  The 6.51 
  270. bitfields match the layout of 6.3, except as noted in "IMPORTANT"
  271. (see above), paragraph 1, for bitfields of size :0.
  272.  
  273. Compiler called __asm function pointers in a function pointer array
  274. as __stdargs functions in some cases.
  275.  
  276. Compiler generated bad code for a dense switch statement with large
  277. unsigned long numbers.
  278.  
  279. Bug was fixed with the peephole optimizer that caused some void _STI
  280. routines to return a nonzero value and thereby terminate the 
  281. program.
  282.  
  283. DISASM option output had extra ',' between the EA and {offset:width}
  284. fields in 68020+ bitfield operations.
  285.  
  286. GO did not respect 'volatile' status in certain rare cases.
  287.  
  288. Structure copy did not clear all possibly aliased values in 
  289. registers.
  290.  
  291. Compiler generated a regargs version of a function in some rare 
  292. cases.
  293.  
  294. Compiler was trashing parameter if register A4 was used as a 
  295. parameter register for an __asm function declared __saveds.
  296.  
  297. Compiler was not allocating double and float register variables in 
  298. math coprocessor mode.
  299.  
  300. =================
  301. SE Editor Changes
  302. =================
  303.  
  304. The CED macros were not installed completely.
  305.  
  306. SE scrollbar behaved erratically.
  307.  
  308. SE overwrote its own title bar after switching to a custom screen 
  309. and back to WorkBench if a large font was chosen as the 
  310. "Screen Text" font.
  311.  
  312. SE locked up when the Zoom gadget was clicked, another file was 
  313. loaded, then the scrollbar was moved to the bottom.
  314.  
  315. SE crashed if you brought it up on the WorkBench screen, hit ENTER 
  316. to put it on its own screen, then opened the configuration window, 
  317. chose a new font, and clicked on the USE button.
  318.  
  319. The '}' character used the tabstops instead of the autoindent stops
  320. when autoindent mode is on.
  321.  
  322. =============================
  323. SCMSG Message Browser Changes
  324. =============================
  325.  
  326. The text of some error messages did not appear when certain fonts 
  327. were used on AGA machines.
  328.  
  329. Hitting HELP on a C++ error message did not work.
  330.  
  331. Double-clicking on messages generated by compiling from within the 
  332. SE editor did not work.
  333.  
  334. SCMSG failed to update the display after CTRL-D was used to delete a
  335. message other than the first one.
  336.  
  337. =====================
  338. Other Utility Changes
  339. =====================
  340.  
  341. LCTOSC locked up in infinite loop if given an invalid flag to the -L
  342. option.
  343.  
  344. ASM could not handle source files with more than 32768 lines.
  345.  
  346. ASM got Bcc offsets wrong if a DATA section occurred before the CODE
  347. section in a source file.
  348.  
  349. ASM did not use BRIEF extension format where it could.
  350.  
  351. ASM gave a syntax error for "dc.l  %01".
  352.  
  353. ASM required an extra ',' between the EA and {offset:width} fields
  354. in 68020+ bitfield operations.  This is still accepted for 
  355. compatibility with old code, but is no longer required.
  356.  
  357. ASM generated illegal code for the CALLM opcode when register 
  358. indirect with predecrement EA is used.  This EA mode is illegal with
  359.  the CALLM opcode, and should be flagged as such.
  360.  
  361. ASM generated illegal code for a byte MOVE with address register 
  362. indirect. This is an invalid mode, and is now flagged as an error.
  363.  
  364. ASM generated incorrect code when indexed indirect with scaling mode
  365. is used.
  366.  
  367. ASM didn't get the right bit pattern for the MOVE16 instruction.
  368.  
  369. OMD output had extra ',' between the EA and {offset:width} fields in
  370. 68020+ bitfield operations.
  371.  
  372. OMD could not correctly disassemble the DIVSL.L opcode.
  373.  
  374. MKMK utility had problems with very long filenames.
  375.  
  376. MKMK utility did not handle indentation correctly for long lines.
  377.  
  378. SCSETUP failed if run from workbench.
  379.  
  380. OML failed if the -t option is used and the temporary filename
  381. specified is on a different volume.
  382.  
  383. OML always used the same filename for temporary files.    It now uses
  384. different names to be more multitasking-friendly.
  385.  
  386. New Manx-compatibility utilities crashed if given certain invalid
  387. parameters.
  388.  
  389. SCOPTS had the default value for the LISTHEADERS option incorrect.
  390.  
  391. SMAKE considered ~ to be a special escape character when included on
  392. a command line.
  393.  
  394. SMAKE substituted trash for $< if you used it twice in one rule and 
  395. there was no .c.o rule.
  396.  
  397. ===============================
  398. Documentation/Help File Changes
  399. ===============================
  400.  
  401. C++ error 1597 was not documented.  It is now documented in the file
  402. sc:help/scmsg.guide.
  403.  
  404. The Library Reference manual incorrectly showed the strstream 
  405. constructor as having a default value of ios::out for the third 
  406. formal parameter mode. Please cross out the "= ios::out" in the 
  407. strstream constructor prototype described on page 684 of the Library
  408. Reference manual. This occurs in two places on page 684, once under 
  409. the Synopsis section and once under the Constructors section.  This 
  410. has been corrected in the online sc_lib.guide file.
  411.  
  412. The Library Reference manual descriptions of mkstemp() and mktemp() 
  413. need to be changed on pages 349 and 351, respectively, to reflect 
  414. the changes made in the header files. In both cases, the formal 
  415. parameter, template should be be changed to template_arg.  This has 
  416. been corrected in the online sc_lib.guide file.
  417.  
  418. ======================
  419. List of Modified Files
  420. ======================
  421.  
  422. The following files were modified during the 6.51 patch installation
  423. process.  If they have version numbers, the version should be 6.51.
  424.  
  425. Drawer            File(s)
  426. ------            -----
  427. sc:c            asm
  428. sc:c            ccotsc
  429. sc:c            cpr
  430. sc:c            cprx
  431. sc:c            cprk
  432. sc:c            lntoslink
  433. sc:c            mcc
  434. sc:c            mkmk
  435. sc:c            mln
  436. sc:c            omd
  437. sc:c            oml
  438. sc:c            sc
  439. sc:c            sc5
  440. sc:c            scopts
  441. sc:c            scsetup
  442. sc:c            se
  443. sc:c            slink
  444. sc:c            smake
  445. sc:cxxinclude        iostream.h
  446. sc:extras/mkmk        gensmake.c
  447. sc:extras/memlib    mwcontrol.c
  448. sc:help         sc.guide
  449. sc:help         sc_lib.guide
  450. sc:help         scmsg.guide
  451. sc:include        assert.h
  452. sc:include        fcntl.h
  453. sc:include        string.h
  454. sc:include/sys        commwben.h
  455. sc:lib            cback.o
  456. sc:lib            All library (.lib files)
  457. sc:libs         sc1.library
  458. sc:libs         sc2.library
  459. sc:libs         scpeep.library
  460. sc:libs         scgo.library
  461. sc:libs         sccxx.library
  462. sc:source        autoopenfail.c
  463. sc:source        cback.a
  464. sc:source        _fpinit.c
  465. sc:source        _iob.c
  466. sc:source        _main.c
  467.