home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / cplus / 16157 < prev    next >
Encoding:
Text File  |  1992-11-12  |  5.3 KB  |  193 lines

  1. Newsgroups: comp.lang.c++
  2. Path: sparky!uunet!mcsun!sun4nl!aie.nl!hansb
  3. From: hansb@aie.nl (Hans Bayle)
  4. Subject: LPI C++ bug
  5. Message-ID: <1992Nov12.112734.11920@aie.nl>
  6. Organization: AI Engineering BV, Amsterdam, The Netherlands
  7. Date: Thu, 12 Nov 1992 11:27:34 GMT
  8. Lines: 183
  9.  
  10.  
  11. This is a bug report for Liant LPI C++, version 01.00.08 for Interactive
  12. Unix 386/ix.
  13. When using the debug option, (-g with lpicxx, or -deb with lpi++) the
  14. calling of methods in objects in which a virtual method is defined will
  15. result in executing the wrong methods, or causing a segmentation fault (when
  16. run in Codewatch as well as run stand alone)
  17. Without the debug option, the code will run correctly. Unfortunately,
  18. the debug option is needed for the source level debugger Codewatch.
  19. So most C++ code will not run when compiled for Codewatch :(
  20. I isolated the bug in the shar archive beneath.
  21.  
  22.  
  23. -- Hans Bayle
  24.  
  25. -------------------------- cut here ---------------------------------------
  26. #!/bin/sh
  27. # This is a shell archive (produced by shar 3.49)
  28. # To extract the files from this archive, save it to a file, remove
  29. # everything above the "!/bin/sh" line above, and type "sh file_name".
  30. #
  31. # made 11/12/1992 10:03 UTC by hansb@aie7
  32. # Source directory /usr7/hansb/lpi-bug
  33. #
  34. # existing files will NOT be overwritten unless -c is specified
  35. #
  36. # This shar contains:
  37. # length  mode       name
  38. # ------ ---------- ------------------------------------------
  39. #    427 -rw-r--r-- Makefile
  40. #    116 -rw-r--r-- subclass.h
  41. #    133 -rw-r--r-- superclass.h
  42. #    253 -rw-r--r-- main.c
  43. #    127 -rw-r--r-- subclass.c
  44. #    237 -rw-r--r-- superclass.c
  45. #
  46. # ============= Makefile ==============
  47. if test -f 'Makefile' -a X"$1" != X"-c"; then
  48.     echo 'x - skipping Makefile (File already exists)'
  49. else
  50. echo 'x - extracting Makefile (Text)'
  51. sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
  52. # File: Makefile
  53. X
  54. CCXX = lpicxx
  55. X
  56. # uncomment the next line for causing the bug
  57. #CFLAGS = -g 
  58. X
  59. test: main.o superclass.o subclass.o
  60. X    $(CCXX) $(CFLAGS) main.o superclass.o subclass.o -o test 
  61. X
  62. main.o: main.c
  63. X    $(CCXX) $(CFLAGS) -c main.c
  64. X
  65. superclass.o: superclass.c superclass.h
  66. X    $(CCXX) $(CFLAGS) -c superclass.c
  67. X
  68. subclass.o: subclass.c superclass.h subclass.h
  69. X    $(CCXX) $(CFLAGS) -c subclass.c
  70. X
  71. clean:
  72. X    rm -f core *.stb test *.o
  73. SHAR_EOF
  74. chmod 0644 Makefile ||
  75. echo 'restore of Makefile failed'
  76. Wc_c="`wc -c < 'Makefile'`"
  77. test 427 -eq "$Wc_c" ||
  78.     echo 'Makefile: original size 427, current size' "$Wc_c"
  79. fi
  80. # ============= subclass.h ==============
  81. if test -f 'subclass.h' -a X"$1" != X"-c"; then
  82.     echo 'x - skipping subclass.h (File already exists)'
  83. else
  84. echo 'x - extracting subclass.h (Text)'
  85. sed 's/^X//' << 'SHAR_EOF' > 'subclass.h' &&
  86. // File: subclass.h
  87. X
  88. #include "superclass.h"
  89. X
  90. class subclass: public superclass {
  91. public:
  92. X    void bug(char* text);
  93. };
  94. SHAR_EOF
  95. chmod 0644 subclass.h ||
  96. echo 'restore of subclass.h failed'
  97. Wc_c="`wc -c < 'subclass.h'`"
  98. test 116 -eq "$Wc_c" ||
  99.     echo 'subclass.h: original size 116, current size' "$Wc_c"
  100. fi
  101. # ============= superclass.h ==============
  102. if test -f 'superclass.h' -a X"$1" != X"-c"; then
  103.     echo 'x - skipping superclass.h (File already exists)'
  104. else
  105. echo 'x - extracting superclass.h (Text)'
  106. sed 's/^X//' << 'SHAR_EOF' > 'superclass.h' &&
  107. // File: superclass.h
  108. X
  109. #include <stdio.h>
  110. X
  111. class superclass {
  112. X    public:
  113. X    virtual void bug(char*);
  114. X    virtual void alsobug(char*);
  115. };
  116. SHAR_EOF
  117. chmod 0644 superclass.h ||
  118. echo 'restore of superclass.h failed'
  119. Wc_c="`wc -c < 'superclass.h'`"
  120. test 133 -eq "$Wc_c" ||
  121.     echo 'superclass.h: original size 133, current size' "$Wc_c"
  122. fi
  123. # ============= main.c ==============
  124. if test -f 'main.c' -a X"$1" != X"-c"; then
  125.     echo 'x - skipping main.c (File already exists)'
  126. else
  127. echo 'x - extracting main.c (Text)'
  128. sed 's/^X//' << 'SHAR_EOF' > 'main.c' &&
  129. // File: main.c
  130. X
  131. #include "subclass.h"
  132. X
  133. main()
  134. {
  135. X    subclass *foo = new subclass; // foo is ptr to object of class subclass
  136. X
  137. X    foo->alsobug("hi");    // the wrong method will be called here
  138. X    foo->bug("hi");        // this will cause a segmentation fault
  139. }
  140. SHAR_EOF
  141. chmod 0644 main.c ||
  142. echo 'restore of main.c failed'
  143. Wc_c="`wc -c < 'main.c'`"
  144. test 253 -eq "$Wc_c" ||
  145.     echo 'main.c: original size 253, current size' "$Wc_c"
  146. fi
  147. # ============= subclass.c ==============
  148. if test -f 'subclass.c' -a X"$1" != X"-c"; then
  149.     echo 'x - skipping subclass.c (File already exists)'
  150. else
  151. echo 'x - extracting subclass.c (Text)'
  152. sed 's/^X//' << 'SHAR_EOF' > 'subclass.c' &&
  153. // File: subclass.h
  154. X
  155. #include "subclass.h"
  156. X
  157. void subclass::bug(char* text)
  158. {
  159. X  printf("subclass::bug() prints: %s\n", text);
  160. }
  161. SHAR_EOF
  162. chmod 0644 subclass.c ||
  163. echo 'restore of subclass.c failed'
  164. Wc_c="`wc -c < 'subclass.c'`"
  165. test 127 -eq "$Wc_c" ||
  166.     echo 'subclass.c: original size 127, current size' "$Wc_c"
  167. fi
  168. # ============= superclass.c ==============
  169. if test -f 'superclass.c' -a X"$1" != X"-c"; then
  170.     echo 'x - skipping superclass.c (File already exists)'
  171. else
  172. echo 'x - extracting superclass.c (Text)'
  173. sed 's/^X//' << 'SHAR_EOF' > 'superclass.c' &&
  174. // File: superclass.c
  175. X
  176. #include "superclass.h"
  177. X
  178. void superclass::bug(char * text) {
  179. X    printf("superclass::bug() prints: %s\n", text);
  180. }
  181. X
  182. void superclass::alsobug(char * text) {
  183. X    printf("superclass::alsobug() prints: %s\n", text);
  184. }
  185. SHAR_EOF
  186. chmod 0644 superclass.c ||
  187. echo 'restore of superclass.c failed'
  188. Wc_c="`wc -c < 'superclass.c'`"
  189. test 237 -eq "$Wc_c" ||
  190.     echo 'superclass.c: original size 237, current size' "$Wc_c"
  191. fi
  192. exit 0
  193.