]>
Commit | Line | Data |
---|---|---|
a7de96f0 PS |
1 | http://sourceware.org/ml/gdb-cvs/2012-08/msg00133.html |
2 | ||
3 | ### src/gdb/ChangeLog 2012/08/17 03:06:10 1.14599 | |
4 | ### src/gdb/ChangeLog 2012/08/17 17:36:56 1.14600 | |
5 | ## -1,3 +1,48 @@ | |
6 | +2012-08-17 Keith Seitz <keiths@redhat.com> | |
7 | + | |
8 | + PR c++/13356 | |
9 | + * gdbtypes.c (strict_type_checking): New variable. | |
10 | + (show_strict_type_checking): New function. | |
11 | + (rank_one_type): Return NS_POINTER_INTEGER_CONVERSION_BADNESS | |
12 | + if strict type checking is disabled. | |
13 | + (_initialize_gdbtypes): Add "check type" subcommand. | |
14 | + * gdbtypes.h (NS_INTEGER_POINTER_CONVERSION_BADNESS): New struct. | |
15 | + | |
16 | +2012-08-17 Keith Seitz <keiths@redhat.com> | |
17 | + | |
18 | + * language.h (type_mode): Remove. | |
19 | + (type_check): Remove. | |
20 | + (struct language_defn): Remove la_type_check. | |
21 | + (STRICT_TYPE): Remove unused macro. | |
22 | + (type_error): Remove. | |
23 | + * language.c (set_type_range_case): Renamed to ... | |
24 | + (set_range_case): ... this. Update all callers. | |
25 | + Remove type_mode/type_check. | |
26 | + (type_mode): Remove. | |
27 | + (type_check): Remove. | |
28 | + (show_type_command): Remove. | |
29 | + (set_type_command): Remove. | |
30 | + (language_info): Remove type checking output. | |
31 | + (type_error): Remove unused function. | |
32 | + (range_error): Update comment. | |
33 | + (unknown_language_defn): Remove la_type_check. | |
34 | + (auto_language_defn): Likewise. | |
35 | + (local_language_defn): Likewise. | |
36 | + (_initialize_language): Remove "check type" subcommand. | |
37 | + * ada-lang.c (ada_language_defn): Remove la_type_check. | |
38 | + * c-lang.c (c_language_defn): Likewise. | |
39 | + (cplus_language_defn): Likewise. | |
40 | + (asm_language_defn): Likewise. | |
41 | + (minimal_language_defn): Likewise. | |
42 | + * d-lang.c (d_language_defn): Likewise. | |
43 | + * f-lang.c (f_language_defn): Likewise. | |
44 | + * go-lang.c (go_language_defn): Likewise. | |
45 | + * jv-lang.c (java_language_defn): Likewise. | |
46 | + * m2-lang.c (m2_language_defn): Likewise. | |
47 | + * objc-lang.c (objc_language_defn): Likewise. | |
48 | + * opencl-lang.c (opencl_language_defn): Likewise. | |
49 | + * p-lang.c (pascal_language_defn): Likewise. | |
50 | + | |
51 | 2012-08-16 Mike Frysinger <vapier@gentoo.org> | |
52 | ||
53 | * infcmd.c (_initialize_infcmd): Remove trailing ) in next help text. | |
54 | Index: gdb-7.5.0.20120926/gdb/gdbtypes.c | |
55 | =================================================================== | |
56 | --- gdb-7.5.0.20120926.orig/gdb/gdbtypes.c 2012-09-27 22:14:21.000000000 +0200 | |
57 | +++ gdb-7.5.0.20120926/gdb/gdbtypes.c 2012-09-27 22:15:05.807706105 +0200 | |
58 | @@ -62,6 +62,7 @@ const struct rank BASE_CONVERSION_BADNES | |
59 | const struct rank REFERENCE_CONVERSION_BADNESS = {2,0}; | |
60 | const struct rank NULL_POINTER_CONVERSION_BADNESS = {2,0}; | |
61 | const struct rank NS_POINTER_CONVERSION_BADNESS = {10,0}; | |
62 | +const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS = {3,0}; | |
63 | ||
64 | /* Floatformat pairs. */ | |
65 | const struct floatformat *floatformats_ieee_half[BFD_ENDIAN_UNKNOWN] = { | |
66 | @@ -134,6 +135,19 @@ show_overload_debug (struct ui_file *fil | |
67 | value); | |
68 | } | |
69 | ||
70 | +/* A flag to enable strict type checking. */ | |
71 | + | |
72 | +static int strict_type_checking = 1; | |
73 | + | |
74 | +/* A function to show the status of strict type checking. */ | |
75 | + | |
76 | +static void | |
77 | +show_strict_type_checking (struct ui_file *file, int from_tty, | |
78 | + struct cmd_list_element *c, const char *value) | |
79 | +{ | |
80 | + fprintf_filtered (file, _("Strict type checking is %s.\n"), value); | |
81 | +} | |
82 | + | |
83 | struct extra | |
84 | { | |
85 | char str[128]; | |
86 | @@ -2649,12 +2663,20 @@ rank_one_type (struct type *parm, struct | |
87 | case TYPE_CODE_FUNC: | |
88 | return rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL); | |
89 | case TYPE_CODE_INT: | |
90 | - if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT | |
91 | - && value_as_long (value) == 0) | |
92 | + if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT) | |
93 | { | |
94 | - /* Null pointer conversion: allow it to be cast to a pointer. | |
95 | - [4.10.1 of C++ standard draft n3290] */ | |
96 | - return NULL_POINTER_CONVERSION_BADNESS; | |
97 | + if (value_as_long (value) == 0) | |
98 | + { | |
99 | + /* Null pointer conversion: allow it to be cast to a pointer. | |
100 | + [4.10.1 of C++ standard draft n3290] */ | |
101 | + return NULL_POINTER_CONVERSION_BADNESS; | |
102 | + } | |
103 | + else | |
104 | + { | |
105 | + /* If type checking is disabled, allow the conversion. */ | |
106 | + if (!strict_type_checking) | |
107 | + return NS_INTEGER_POINTER_CONVERSION_BADNESS; | |
108 | + } | |
109 | } | |
110 | /* fall through */ | |
111 | case TYPE_CODE_ENUM: | |
112 | @@ -4637,4 +4659,13 @@ _initialize_gdbtypes (void) | |
113 | NULL, NULL, | |
114 | show_opaque_type_resolution, | |
115 | &setlist, &showlist); | |
116 | + | |
117 | + /* Add an option to permit non-strict type checking. */ | |
118 | + add_setshow_boolean_cmd ("type", class_support, | |
119 | + &strict_type_checking, | |
120 | + _("Set strict type checking."), | |
121 | + _("Show strict type checking."), | |
122 | + NULL, NULL, | |
123 | + show_strict_type_checking, | |
124 | + &setchecklist, &showchecklist); | |
125 | } | |
126 | Index: gdb-7.5.0.20120926/gdb/gdbtypes.h | |
127 | =================================================================== | |
128 | --- gdb-7.5.0.20120926.orig/gdb/gdbtypes.h 2012-09-27 22:14:23.000000000 +0200 | |
129 | +++ gdb-7.5.0.20120926/gdb/gdbtypes.h 2012-09-27 22:14:40.690695059 +0200 | |
130 | @@ -1745,6 +1745,9 @@ extern const struct rank NULL_POINTER_CO | |
131 | /* Converting a pointer to an int is usually OK. */ | |
132 | extern const struct rank NS_POINTER_CONVERSION_BADNESS; | |
133 | ||
134 | +/* Badness of converting a (non-zero) integer constant | |
135 | + to a pointer. */ | |
136 | +extern const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS; | |
137 | ||
138 | extern struct rank sum_ranks (struct rank a, struct rank b); | |
139 | extern int compare_ranks (struct rank a, struct rank b); | |
140 | Index: gdb-7.5.0.20120926/gdb/language.h | |
141 | =================================================================== | |
142 | --- gdb-7.5.0.20120926.orig/gdb/language.h 2012-06-13 17:47:14.000000000 +0200 | |
143 | +++ gdb-7.5.0.20120926/gdb/language.h 2012-09-27 22:14:40.834695121 +0200 | |
144 | @@ -55,27 +55,6 @@ extern enum range_check | |
145 | } | |
146 | range_check; | |
147 | ||
148 | -/* type_mode == | |
149 | - type_mode_auto: type_check set automatically to default of language. | |
150 | - type_mode_manual: type_check set manually by user. */ | |
151 | - | |
152 | -extern enum type_mode | |
153 | - { | |
154 | - type_mode_auto, type_mode_manual | |
155 | - } | |
156 | -type_mode; | |
157 | - | |
158 | -/* type_check == | |
159 | - type_check_on: Types are checked in GDB expressions, producing errors. | |
160 | - type_check_warn: Types are checked, producing warnings. | |
161 | - type_check_off: Types are not checked in GDB expressions. */ | |
162 | - | |
163 | -extern enum type_check | |
164 | - { | |
165 | - type_check_off, type_check_warn, type_check_on | |
166 | - } | |
167 | -type_check; | |
168 | - | |
169 | /* case_mode == | |
170 | case_mode_auto: case_sensitivity set upon selection of scope. | |
171 | case_mode_manual: case_sensitivity set only by user. */ | |
172 | @@ -162,10 +141,6 @@ struct language_defn | |
173 | ||
174 | enum range_check la_range_check; | |
175 | ||
176 | - /* Default type checking. */ | |
177 | - | |
178 | - enum type_check la_type_check; | |
179 | - | |
180 | /* Default case sensitivity. */ | |
181 | enum case_sensitivity la_case_sensitivity; | |
182 | ||
183 | @@ -422,9 +397,6 @@ struct type *language_lookup_primitive_t | |
184 | /* These macros define the behaviour of the expression | |
185 | evaluator. */ | |
186 | ||
187 | -/* Should we strictly type check expressions? */ | |
188 | -#define STRICT_TYPE (type_check != type_check_off) | |
189 | - | |
190 | /* Should we range check values against the domain of their type? */ | |
191 | #define RANGE_CHECK (range_check != range_check_off) | |
192 | ||
193 | @@ -496,8 +468,6 @@ extern void binop_type_check (struct val | |
194 | ||
195 | /* Error messages */ | |
196 | ||
197 | -extern void type_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2); | |
198 | - | |
199 | extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2); | |
200 | ||
201 | /* Data: Does this value represent "truth" to the current language? */ | |
202 | Index: gdb-7.5.0.20120926/gdb/language.c | |
203 | =================================================================== | |
204 | --- gdb-7.5.0.20120926.orig/gdb/language.c 2012-03-02 20:29:01.000000000 +0100 | |
205 | +++ gdb-7.5.0.20120926/gdb/language.c 2012-09-27 22:14:40.922695162 +0200 | |
206 | @@ -55,7 +55,7 @@ static void show_check (char *, int); | |
207 | ||
208 | static void set_check (char *, int); | |
209 | ||
210 | -static void set_type_range_case (void); | |
211 | +static void set_range_case (void); | |
212 | ||
213 | static void unk_lang_emit_char (int c, struct type *type, | |
214 | struct ui_file *stream, int quoter); | |
215 | @@ -81,8 +81,6 @@ extern const struct language_defn unknow | |
216 | ||
217 | enum range_mode range_mode = range_mode_auto; | |
218 | enum range_check range_check = range_check_off; | |
219 | -enum type_mode type_mode = type_mode_auto; | |
220 | -enum type_check type_check = type_check_off; | |
221 | enum case_mode case_mode = case_mode_auto; | |
222 | enum case_sensitivity case_sensitivity = case_sensitive_on; | |
223 | ||
224 | @@ -174,7 +172,7 @@ set_language_command (char *ignore, int | |
225 | /* Enter manual mode. Set the specified language. */ | |
226 | language_mode = language_mode_manual; | |
227 | current_language = languages[i]; | |
228 | - set_type_range_case (); | |
229 | + set_range_case (); | |
230 | expected_language = current_language; | |
231 | return; | |
232 | } | |
233 | @@ -186,79 +184,6 @@ set_language_command (char *ignore, int | |
234 | language); | |
235 | } | |
236 | ||
237 | -/* Show command. Display a warning if the type setting does | |
238 | - not match the current language. */ | |
239 | -static void | |
240 | -show_type_command (struct ui_file *file, int from_tty, | |
241 | - struct cmd_list_element *c, const char *value) | |
242 | -{ | |
243 | - if (type_mode == type_mode_auto) | |
244 | - { | |
245 | - char *tmp = NULL; | |
246 | - | |
247 | - switch (type_check) | |
248 | - { | |
249 | - case type_check_on: | |
250 | - tmp = "on"; | |
251 | - break; | |
252 | - case type_check_off: | |
253 | - tmp = "off"; | |
254 | - break; | |
255 | - case type_check_warn: | |
256 | - tmp = "warn"; | |
257 | - break; | |
258 | - default: | |
259 | - internal_error (__FILE__, __LINE__, | |
260 | - "Unrecognized type check setting."); | |
261 | - } | |
262 | - | |
263 | - fprintf_filtered (gdb_stdout, | |
264 | - _("Type checking is \"auto; currently %s\".\n"), | |
265 | - tmp); | |
266 | - } | |
267 | - else | |
268 | - fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"), | |
269 | - value); | |
270 | - | |
271 | - if (type_check != current_language->la_type_check) | |
272 | - warning (_("the current type check setting" | |
273 | - " does not match the language.\n")); | |
274 | -} | |
275 | - | |
276 | -/* Set command. Change the setting for type checking. */ | |
277 | -static void | |
278 | -set_type_command (char *ignore, int from_tty, struct cmd_list_element *c) | |
279 | -{ | |
280 | - if (strcmp (type, "on") == 0) | |
281 | - { | |
282 | - type_check = type_check_on; | |
283 | - type_mode = type_mode_manual; | |
284 | - } | |
285 | - else if (strcmp (type, "warn") == 0) | |
286 | - { | |
287 | - type_check = type_check_warn; | |
288 | - type_mode = type_mode_manual; | |
289 | - } | |
290 | - else if (strcmp (type, "off") == 0) | |
291 | - { | |
292 | - type_check = type_check_off; | |
293 | - type_mode = type_mode_manual; | |
294 | - } | |
295 | - else if (strcmp (type, "auto") == 0) | |
296 | - { | |
297 | - type_mode = type_mode_auto; | |
298 | - set_type_range_case (); | |
299 | - return; | |
300 | - } | |
301 | - else | |
302 | - internal_error (__FILE__, __LINE__, | |
303 | - _("Unrecognized type check setting: \"%s\""), type); | |
304 | - | |
305 | - if (type_check != current_language->la_type_check) | |
306 | - warning (_("the current type check setting" | |
307 | - " does not match the language.\n")); | |
308 | -} | |
309 | - | |
310 | /* Show command. Display a warning if the range setting does | |
311 | not match the current language. */ | |
312 | static void | |
313 | @@ -320,7 +245,7 @@ set_range_command (char *ignore, int fro | |
314 | else if (strcmp (range, "auto") == 0) | |
315 | { | |
316 | range_mode = range_mode_auto; | |
317 | - set_type_range_case (); | |
318 | + set_range_case (); | |
319 | return; | |
320 | } | |
321 | else | |
322 | @@ -389,7 +314,7 @@ set_case_command (char *ignore, int from | |
323 | else if (strcmp (case_sensitive, "auto") == 0) | |
324 | { | |
325 | case_mode = case_mode_auto; | |
326 | - set_type_range_case (); | |
327 | + set_range_case (); | |
328 | return; | |
329 | } | |
330 | else | |
331 | @@ -409,14 +334,11 @@ set_case_command (char *ignore, int from | |
332 | If SHOW is non-zero, then print out the current language, | |
333 | type and range checking status. */ | |
334 | static void | |
335 | -set_type_range_case (void) | |
336 | +set_range_case (void) | |
337 | { | |
338 | if (range_mode == range_mode_auto) | |
339 | range_check = current_language->la_range_check; | |
340 | ||
341 | - if (type_mode == type_mode_auto) | |
342 | - type_check = current_language->la_type_check; | |
343 | - | |
344 | if (case_mode == case_mode_auto) | |
345 | case_sensitivity = current_language->la_case_sensitivity; | |
346 | } | |
347 | @@ -437,7 +359,7 @@ set_language (enum language lang) | |
348 | if (languages[i]->la_language == lang) | |
349 | { | |
350 | current_language = languages[i]; | |
351 | - set_type_range_case (); | |
352 | + set_range_case (); | |
353 | break; | |
354 | } | |
355 | } | |
356 | @@ -461,8 +383,6 @@ language_info (int quietly) | |
357 | ||
358 | if (!quietly) | |
359 | { | |
360 | - printf_unfiltered (_("Type checking: %s\n"), type); | |
361 | - show_type_command (NULL, 1, NULL, NULL); | |
362 | printf_unfiltered (_("Range checking: %s\n"), range); | |
363 | show_range_command (NULL, 1, NULL, NULL); | |
364 | printf_unfiltered (_("Case sensitivity: %s\n"), case_sensitive); | |
365 | @@ -500,38 +420,11 @@ value_true (struct value *val) | |
366 | error messages that occur during type- and range- | |
367 | checking. */ | |
368 | ||
369 | -/* These are called when a language fails a type- or range-check. The | |
370 | +/* This is called when a language fails a range-check. The | |
371 | first argument should be a printf()-style format string, and the | |
372 | - rest of the arguments should be its arguments. If | |
373 | - [type|range]_check is [type|range]_check_on, an error is printed; | |
374 | - if [type|range]_check_warn, a warning; otherwise just the | |
375 | - message. */ | |
376 | - | |
377 | -void | |
378 | -type_error (const char *string,...) | |
379 | -{ | |
380 | - va_list args; | |
381 | - | |
382 | - va_start (args, string); | |
383 | - switch (type_check) | |
384 | - { | |
385 | - case type_check_warn: | |
386 | - vwarning (string, args); | |
387 | - break; | |
388 | - case type_check_on: | |
389 | - verror (string, args); | |
390 | - break; | |
391 | - case type_check_off: | |
392 | - /* FIXME: cagney/2002-01-30: Should this function print anything | |
393 | - when type error is off? */ | |
394 | - vfprintf_filtered (gdb_stderr, string, args); | |
395 | - fprintf_filtered (gdb_stderr, "\n"); | |
396 | - break; | |
397 | - default: | |
398 | - internal_error (__FILE__, __LINE__, _("bad switch")); | |
399 | - } | |
400 | - va_end (args); | |
401 | -} | |
402 | + rest of the arguments should be its arguments. If range_check is | |
403 | + range_check_on, an error is printed; if range_check_warn, a warning; | |
404 | + otherwise just the message. */ | |
405 | ||
406 | void | |
407 | range_error (const char *string,...) | |
408 | @@ -902,7 +795,6 @@ const struct language_defn unknown_langu | |
409 | "unknown", | |
410 | language_unknown, | |
411 | range_check_off, | |
412 | - type_check_off, | |
413 | case_sensitive_on, | |
414 | array_row_major, | |
415 | macro_expansion_no, | |
416 | @@ -946,7 +838,6 @@ const struct language_defn auto_language | |
417 | "auto", | |
418 | language_auto, | |
419 | range_check_off, | |
420 | - type_check_off, | |
421 | case_sensitive_on, | |
422 | array_row_major, | |
423 | macro_expansion_no, | |
424 | @@ -988,7 +879,6 @@ const struct language_defn local_languag | |
425 | "local", | |
426 | language_auto, | |
427 | range_check_off, | |
428 | - type_check_off, | |
429 | case_sensitive_on, | |
430 | array_row_major, | |
431 | macro_expansion_no, | |
432 | @@ -1135,13 +1025,6 @@ _initialize_language (void) | |
433 | add_alias_cmd ("c", "check", no_class, 1, &showlist); | |
434 | add_alias_cmd ("ch", "check", no_class, 1, &showlist); | |
435 | ||
436 | - add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type, | |
437 | - _("Set type checking. (on/warn/off/auto)"), | |
438 | - _("Show type checking. (on/warn/off/auto)"), | |
439 | - NULL, set_type_command, | |
440 | - show_type_command, | |
441 | - &setchecklist, &showchecklist); | |
442 | - | |
443 | add_setshow_enum_cmd ("range", class_support, type_or_range_names, | |
444 | &range, | |
445 | _("Set range checking. (on/warn/off/auto)"), | |
446 | Index: gdb-7.5.0.20120926/gdb/ada-lang.c | |
447 | =================================================================== | |
448 | --- gdb-7.5.0.20120926.orig/gdb/ada-lang.c 2012-09-27 22:14:17.000000000 +0200 | |
449 | +++ gdb-7.5.0.20120926/gdb/ada-lang.c 2012-09-27 22:14:41.112695245 +0200 | |
450 | @@ -12503,7 +12503,6 @@ const struct language_defn ada_language_ | |
451 | "ada", /* Language name */ | |
452 | language_ada, | |
453 | range_check_off, | |
454 | - type_check_off, | |
455 | case_sensitive_on, /* Yes, Ada is case-insensitive, but | |
456 | that's not quite what this means. */ | |
457 | array_row_major, | |
458 | Index: gdb-7.5.0.20120926/gdb/c-lang.c | |
459 | =================================================================== | |
460 | --- gdb-7.5.0.20120926.orig/gdb/c-lang.c 2012-07-06 07:46:04.000000000 +0200 | |
461 | +++ gdb-7.5.0.20120926/gdb/c-lang.c 2012-09-27 22:14:41.141695257 +0200 | |
462 | @@ -831,7 +831,6 @@ const struct language_defn c_language_de | |
463 | "c", /* Language name */ | |
464 | language_c, | |
465 | range_check_off, | |
466 | - type_check_off, | |
467 | case_sensitive_on, | |
468 | array_row_major, | |
469 | macro_expansion_c, | |
470 | @@ -955,7 +954,6 @@ const struct language_defn cplus_languag | |
471 | "c++", /* Language name */ | |
472 | language_cplus, | |
473 | range_check_off, | |
474 | - type_check_off, | |
475 | case_sensitive_on, | |
476 | array_row_major, | |
477 | macro_expansion_c, | |
478 | @@ -997,7 +995,6 @@ const struct language_defn asm_language_ | |
479 | "asm", /* Language name */ | |
480 | language_asm, | |
481 | range_check_off, | |
482 | - type_check_off, | |
483 | case_sensitive_on, | |
484 | array_row_major, | |
485 | macro_expansion_c, | |
486 | @@ -1044,7 +1041,6 @@ const struct language_defn minimal_langu | |
487 | "minimal", /* Language name */ | |
488 | language_minimal, | |
489 | range_check_off, | |
490 | - type_check_off, | |
491 | case_sensitive_on, | |
492 | array_row_major, | |
493 | macro_expansion_c, | |
494 | Index: gdb-7.5.0.20120926/gdb/d-lang.c | |
495 | =================================================================== | |
496 | --- gdb-7.5.0.20120926.orig/gdb/d-lang.c 2012-03-15 15:06:20.000000000 +0100 | |
497 | +++ gdb-7.5.0.20120926/gdb/d-lang.c 2012-09-27 22:14:41.143695257 +0200 | |
498 | @@ -240,7 +240,6 @@ static const struct language_defn d_lang | |
499 | "d", | |
500 | language_d, | |
501 | range_check_off, | |
502 | - type_check_off, | |
503 | case_sensitive_on, | |
504 | array_row_major, | |
505 | macro_expansion_c, | |
506 | Index: gdb-7.5.0.20120926/gdb/f-lang.c | |
507 | =================================================================== | |
508 | --- gdb-7.5.0.20120926.orig/gdb/f-lang.c 2012-09-27 22:14:23.000000000 +0200 | |
509 | +++ gdb-7.5.0.20120926/gdb/f-lang.c 2012-09-27 22:14:41.151695260 +0200 | |
510 | @@ -260,7 +260,6 @@ const struct language_defn f_language_de | |
511 | "fortran", | |
512 | language_fortran, | |
513 | range_check_on, | |
514 | - type_check_on, | |
515 | case_sensitive_off, | |
516 | array_column_major, | |
517 | macro_expansion_no, | |
518 | Index: gdb-7.5.0.20120926/gdb/go-lang.c | |
519 | =================================================================== | |
520 | --- gdb-7.5.0.20120926.orig/gdb/go-lang.c 2012-04-25 16:07:20.000000000 +0200 | |
521 | +++ gdb-7.5.0.20120926/gdb/go-lang.c 2012-09-27 22:14:41.152695261 +0200 | |
522 | @@ -562,7 +562,6 @@ static const struct language_defn go_lan | |
523 | "go", | |
524 | language_go, | |
525 | range_check_off, | |
526 | - type_check_off, | |
527 | case_sensitive_on, | |
528 | array_row_major, | |
529 | macro_expansion_no, | |
530 | Index: gdb-7.5.0.20120926/gdb/jv-lang.c | |
531 | =================================================================== | |
532 | --- gdb-7.5.0.20120926.orig/gdb/jv-lang.c 2012-09-27 22:14:23.000000000 +0200 | |
533 | +++ gdb-7.5.0.20120926/gdb/jv-lang.c 2012-09-27 22:14:41.154695263 +0200 | |
534 | @@ -1169,7 +1169,6 @@ const struct language_defn java_language | |
535 | "java", /* Language name */ | |
536 | language_java, | |
537 | range_check_off, | |
538 | - type_check_off, | |
539 | case_sensitive_on, | |
540 | array_row_major, | |
541 | macro_expansion_no, | |
542 | Index: gdb-7.5.0.20120926/gdb/m2-lang.c | |
543 | =================================================================== | |
544 | --- gdb-7.5.0.20120926.orig/gdb/m2-lang.c 2012-03-02 20:29:01.000000000 +0100 | |
545 | +++ gdb-7.5.0.20120926/gdb/m2-lang.c 2012-09-27 22:14:41.161695266 +0200 | |
546 | @@ -370,7 +370,6 @@ const struct language_defn m2_language_d | |
547 | "modula-2", | |
548 | language_m2, | |
549 | range_check_on, | |
550 | - type_check_on, | |
551 | case_sensitive_on, | |
552 | array_row_major, | |
553 | macro_expansion_no, | |
554 | Index: gdb-7.5.0.20120926/gdb/objc-lang.c | |
555 | =================================================================== | |
556 | --- gdb-7.5.0.20120926.orig/gdb/objc-lang.c 2012-03-02 20:29:01.000000000 +0100 | |
557 | +++ gdb-7.5.0.20120926/gdb/objc-lang.c 2012-09-27 22:14:41.163695268 +0200 | |
558 | @@ -509,7 +509,6 @@ const struct language_defn objc_language | |
559 | "objective-c", /* Language name */ | |
560 | language_objc, | |
561 | range_check_off, | |
562 | - type_check_off, | |
563 | case_sensitive_on, | |
564 | array_row_major, | |
565 | macro_expansion_c, | |
566 | Index: gdb-7.5.0.20120926/gdb/opencl-lang.c | |
567 | =================================================================== | |
568 | --- gdb-7.5.0.20120926.orig/gdb/opencl-lang.c 2012-03-02 20:29:01.000000000 +0100 | |
569 | +++ gdb-7.5.0.20120926/gdb/opencl-lang.c 2012-09-27 22:14:41.165695268 +0200 | |
570 | @@ -993,7 +993,6 @@ const struct language_defn opencl_langua | |
571 | "opencl", /* Language name */ | |
572 | language_opencl, | |
573 | range_check_off, | |
574 | - type_check_off, | |
575 | case_sensitive_on, | |
576 | array_row_major, | |
577 | macro_expansion_c, | |
578 | Index: gdb-7.5.0.20120926/gdb/p-lang.c | |
579 | =================================================================== | |
580 | --- gdb-7.5.0.20120926.orig/gdb/p-lang.c 2012-03-02 20:29:01.000000000 +0100 | |
581 | +++ gdb-7.5.0.20120926/gdb/p-lang.c 2012-09-27 22:14:41.170695270 +0200 | |
582 | @@ -429,7 +429,6 @@ const struct language_defn pascal_langua | |
583 | "pascal", /* Language name */ | |
584 | language_pascal, | |
585 | range_check_on, | |
586 | - type_check_on, | |
587 | case_sensitive_on, | |
588 | array_row_major, | |
589 | macro_expansion_no, | |
590 | Index: gdb-7.5.0.20120926/gdb/doc/gdb.texinfo | |
591 | =================================================================== | |
592 | --- gdb-7.5.0.20120926.orig/gdb/doc/gdb.texinfo 2012-09-27 22:14:23.000000000 +0200 | |
593 | +++ gdb-7.5.0.20120926/gdb/doc/gdb.texinfo 2012-09-27 22:14:41.188695279 +0200 | |
594 | @@ -12648,29 +12648,18 @@ List all the filename extensions and the | |
595 | @node Checks | |
596 | @section Type and Range Checking | |
597 | ||
598 | -@quotation | |
599 | -@emph{Warning:} In this release, the @value{GDBN} commands for type and range | |
600 | -checking are included, but they do not yet have any effect. This | |
601 | -section documents the intended facilities. | |
602 | -@end quotation | |
603 | -@c FIXME remove warning when type/range code added | |
604 | - | |
605 | Some languages are designed to guard you against making seemingly common | |
606 | errors through a series of compile- and run-time checks. These include | |
607 | -checking the type of arguments to functions and operators, and making | |
608 | +checking the type of arguments to functions and operators and making | |
609 | sure mathematical overflows are caught at run time. Checks such as | |
610 | these help to ensure a program's correctness once it has been compiled | |
611 | -by eliminating type mismatches, and providing active checks for range | |
612 | +by eliminating type mismatches and providing active checks for range | |
613 | errors when your program is running. | |
614 | ||
615 | -@value{GDBN} can check for conditions like the above if you wish. | |
616 | -Although @value{GDBN} does not check the statements in your program, | |
617 | -it can check expressions entered directly into @value{GDBN} for | |
618 | -evaluation via the @code{print} command, for example. As with the | |
619 | -working language, @value{GDBN} can also decide whether or not to check | |
620 | -automatically based on your program's source language. | |
621 | -@xref{Supported Languages, ,Supported Languages}, for the default | |
622 | -settings of supported languages. | |
623 | +By default @value{GDBN} checks for these errors according to the | |
624 | +rules of the current source language. Although @value{GDBN} does not check | |
625 | +the statements in your program, it can check expressions entered directly | |
626 | +into @value{GDBN} for evaluation via the @code{print} command, for example. | |
627 | ||
628 | @menu | |
629 | * Type Checking:: An overview of type checking | |
630 | @@ -12682,69 +12671,51 @@ settings of supported languages. | |
631 | @node Type Checking | |
632 | @subsection An Overview of Type Checking | |
633 | ||
634 | -Some languages, such as Modula-2, are strongly typed, meaning that the | |
635 | +Some languages, such as C and C@t{++}, are strongly typed, meaning that the | |
636 | arguments to operators and functions have to be of the correct type, | |
637 | otherwise an error occurs. These checks prevent type mismatch | |
638 | errors from ever causing any run-time problems. For example, | |
639 | ||
640 | @smallexample | |
641 | -1 + 2 @result{} 3 | |
642 | +int klass::my_method(char *b) @{ return b ? 1 : 2; @} | |
643 | + | |
644 | +(@value{GDBP}) print obj.my_method (0) | |
645 | +$1 = 2 | |
646 | @exdent but | |
647 | -@error{} 1 + 2.3 | |
648 | +(@value{GDBP}) print obj.my_method (0x1234) | |
649 | +Cannot resolve method klass::my_method to any overloaded instance | |
650 | @end smallexample | |
651 | ||
652 | -The second example fails because the @code{CARDINAL} 1 is not | |
653 | -type-compatible with the @code{REAL} 2.3. | |
654 | +The second example fails because in C@t{++} the integer constant | |
655 | +@samp{0x1234} is not type-compatible with the pointer parameter type. | |
656 | ||
657 | -For the expressions you use in @value{GDBN} commands, you can tell the | |
658 | -@value{GDBN} type checker to skip checking; | |
659 | +For the expressions you use in @value{GDBN} commands, you can tell | |
660 | +@value{GDBN} to not enforce strict type checking or | |
661 | to treat any mismatches as errors and abandon the expression; | |
662 | -or to only issue warnings when type mismatches occur, | |
663 | -but evaluate the expression anyway. When you choose the last of | |
664 | -these, @value{GDBN} evaluates expressions like the second example above, but | |
665 | -also issues a warning. | |
666 | +When type checking is disabled, @value{GDBN} successfully evaluates | |
667 | +expressions like the second example above. | |
668 | ||
669 | -Even if you turn type checking off, there may be other reasons | |
670 | +Even if type checking is off, there may be other reasons | |
671 | related to type that prevent @value{GDBN} from evaluating an expression. | |
672 | For instance, @value{GDBN} does not know how to add an @code{int} and | |
673 | a @code{struct foo}. These particular type errors have nothing to do | |
674 | -with the language in use, and usually arise from expressions, such as | |
675 | -the one described above, which make little sense to evaluate anyway. | |
676 | - | |
677 | -Each language defines to what degree it is strict about type. For | |
678 | -instance, both Modula-2 and C require the arguments to arithmetical | |
679 | -operators to be numbers. In C, enumerated types and pointers can be | |
680 | -represented as numbers, so that they are valid arguments to mathematical | |
681 | -operators. @xref{Supported Languages, ,Supported Languages}, for further | |
682 | -details on specific languages. | |
683 | +with the language in use and usually arise from expressions which make | |
684 | +little sense to evaluate anyway. | |
685 | ||
686 | -@value{GDBN} provides some additional commands for controlling the type checker: | |
687 | +@value{GDBN} provides some additional commands for controlling type checking: | |
688 | ||
689 | @kindex set check type | |
690 | @kindex show check type | |
691 | @table @code | |
692 | -@item set check type auto | |
693 | -Set type checking on or off based on the current working language. | |
694 | -@xref{Supported Languages, ,Supported Languages}, for the default settings for | |
695 | -each language. | |
696 | - | |
697 | @item set check type on | |
698 | @itemx set check type off | |
699 | -Set type checking on or off, overriding the default setting for the | |
700 | -current working language. Issue a warning if the setting does not | |
701 | -match the language default. If any type mismatches occur in | |
702 | +Set strict type checking on or off. If any type mismatches occur in | |
703 | evaluating an expression while type checking is on, @value{GDBN} prints a | |
704 | message and aborts evaluation of the expression. | |
705 | ||
706 | -@item set check type warn | |
707 | -Cause the type checker to issue warnings, but to always attempt to | |
708 | -evaluate the expression. Evaluating the expression may still | |
709 | -be impossible for other reasons. For example, @value{GDBN} cannot add | |
710 | -numbers and structures. | |
711 | - | |
712 | -@item show type | |
713 | -Show the current setting of the type checker, and whether or not @value{GDBN} | |
714 | -is setting it automatically. | |
715 | +@item show check type | |
716 | +Show the current setting of type checking and whether @value{GDBN} | |
717 | +is enforcing strict type checking rules. | |
718 | @end table | |
719 | ||
720 | @cindex range checking | |
721 | @@ -13195,8 +13166,8 @@ specification. | |
722 | ||
723 | @cindex C and C@t{++} defaults | |
724 | ||
725 | -If you allow @value{GDBN} to set type and range checking automatically, they | |
726 | -both default to @code{off} whenever the working language changes to | |
727 | +If you allow @value{GDBN} to set range checking automatically, it | |
728 | +defaults to @code{off} whenever the working language changes to | |
729 | C or C@t{++}. This happens regardless of whether you or @value{GDBN} | |
730 | selects the working language. | |
731 | ||
732 | @@ -13207,37 +13178,15 @@ these files, it sets the working languag | |
733 | @xref{Automatically, ,Having @value{GDBN} Infer the Source Language}, | |
734 | for further details. | |
735 | ||
736 | -@c Type checking is (a) primarily motivated by Modula-2, and (b) | |
737 | -@c unimplemented. If (b) changes, it might make sense to let this node | |
738 | -@c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93. | |
739 | - | |
740 | @node C Checks | |
741 | @subsubsection C and C@t{++} Type and Range Checks | |
742 | ||
743 | @cindex C and C@t{++} checks | |
744 | ||
745 | -By default, when @value{GDBN} parses C or C@t{++} expressions, type checking | |
746 | -is not used. However, if you turn type checking on, @value{GDBN} | |
747 | -considers two variables type equivalent if: | |
748 | - | |
749 | -@itemize @bullet | |
750 | -@item | |
751 | -The two variables are structured and have the same structure, union, or | |
752 | -enumerated tag. | |
753 | - | |
754 | -@item | |
755 | -The two variables have the same type name, or types that have been | |
756 | -declared equivalent through @code{typedef}. | |
757 | - | |
758 | -@ignore | |
759 | -@c leaving this out because neither J Gilmore nor R Pesch understand it. | |
760 | -@c FIXME--beers? | |
761 | -@item | |
762 | -The two @code{struct}, @code{union}, or @code{enum} variables are | |
763 | -declared in the same declaration. (Note: this may not be true for all C | |
764 | -compilers.) | |
765 | -@end ignore | |
766 | -@end itemize | |
767 | +By default, when @value{GDBN} parses C or C@t{++} expressions, strict type | |
768 | +checking is used. However, if you turn type checking off, @value{GDBN} | |
769 | +will allow certain non-standard conversions, such as promoting integer | |
770 | +constants to pointers. | |
771 | ||
772 | Range checking, if turned on, is done on mathematical operations. Array | |
773 | indices are not checked, since they are often used to index a pointer | |
774 | Index: gdb-7.5.0.20120926/gdb/testsuite/gdb.base/default.exp | |
775 | =================================================================== | |
776 | --- gdb-7.5.0.20120926.orig/gdb/testsuite/gdb.base/default.exp 2012-04-27 22:52:06.000000000 +0200 | |
777 | +++ gdb-7.5.0.20120926/gdb/testsuite/gdb.base/default.exp 2012-09-27 22:14:41.312695333 +0200 | |
778 | @@ -495,12 +495,13 @@ gdb_test "section" "Must specify section | |
779 | gdb_test "set annotate" "Argument required .integer to set it to.*" "set annotate" | |
780 | #test set args | |
781 | gdb_test_no_output "set args" "set args" | |
782 | -#test set check "c" abbreviation | |
783 | -gdb_test "set c" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"c\" abbreviation" | |
784 | -#test set check "ch" abbreviation | |
785 | -gdb_test "set ch" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"ch\" abbreviation" | |
786 | -#test set check | |
787 | -gdb_test "set check" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check" | |
788 | + | |
789 | +# Test set check abbreviations | |
790 | +foreach x {"c" "ch" "check"} { | |
791 | + gdb_test "set $x" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set strict type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." \ | |
792 | + "set check \"$x\" abbreviation" | |
793 | +} | |
794 | + | |
795 | #test set check range | |
796 | gdb_test "set check range" ".*" "set check range" | |
797 | #test set check type | |
798 | @@ -577,16 +578,17 @@ gdb_test "shell echo Hi dad!" "Hi dad!" | |
799 | gdb_test "show annotate" "Annotation_level is 0." "show annotate" | |
800 | #test show args | |
801 | gdb_test "show args" "Argument list to give program being debugged when it is started is \"\"." "show args" | |
802 | -#test show check "c" abbreviation | |
803 | -gdb_test "show c" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type: *Type checking is \"auto; currently off\".*" "show check \"c\" abbreviation" | |
804 | -#test show check "ch" abbreviation | |
805 | -gdb_test "show ch" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type: *Type checking is \"auto; currently off\"." "show check \"ch\" abbreviation" | |
806 | -#test show check | |
807 | -gdb_test "show check" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type: *Type checking is \"auto; currently off\"." "show check" | |
808 | + | |
809 | +# test show check abbreviations | |
810 | +foreach x {"c" "ch" "check"} { | |
811 | + gdb_test "show $x" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type: *Strict type checking is on\..*" \ | |
812 | + "show check \"$x\" abbreviation" | |
813 | +} | |
814 | + | |
815 | #test show check range | |
816 | gdb_test "show check range" "Range checking is \"auto; currently off\"." "show check range" | |
817 | #test show check type | |
818 | -gdb_test "show check type" "Type checking is \"auto; currently off\"." "show check type" | |
819 | +gdb_test "show check type" "Strict type checking is on\." "show check type" | |
820 | #test show commands | |
821 | gdb_test "show commands" ".*" "show commands" | |
822 | #test show complaints | |
823 | Index: gdb-7.5.0.20120926/gdb/testsuite/gdb.base/help.exp | |
824 | =================================================================== | |
825 | --- gdb-7.5.0.20120926.orig/gdb/testsuite/gdb.base/help.exp 2012-07-02 19:53:19.000000000 +0200 | |
826 | +++ gdb-7.5.0.20120926/gdb/testsuite/gdb.base/help.exp 2012-09-27 22:14:41.315695333 +0200 | |
827 | @@ -376,22 +376,26 @@ gdb_test "help section" "Change the base | |
828 | gdb_test "help set annotate" "Set annotation_level\.\[\r\n\]+0 == normal; 1 == fullname \\(for use when running under emacs\\)\[\r\n\]+2 == output annotated suitably for use by programs that control GDB\." "help set annotate" | |
829 | # test help set args | |
830 | gdb_test "help set args" "Set argument list to give program being debugged when it is started\.\[\r\n\]+Follow this command with any number of args, to be passed to the program\." | |
831 | -# test help set check "c" abbreviation | |
832 | -test_prefix_command_help {"set c" "set check"} { | |
833 | - "Set the status of the type/range checker\.\[\r\n\]+" | |
834 | -} "help set check \"c\" abbreviation" | |
835 | -# test help set check "ch" abbreviation | |
836 | -test_prefix_command_help {"set ch" "set check"} { | |
837 | - "Set the status of the type/range checker\.\[\r\n\]+" | |
838 | -} "help set check \"ch\" abbreviation" | |
839 | -# test help set check | |
840 | + | |
841 | +# Test help set check abbreviations | |
842 | +foreach x {"c" "ch"} { | |
843 | + test_prefix_command_help [list "set $x" "set check"] { | |
844 | + "Set the status of the type/range checker\.\[\r\n\]+" | |
845 | + } "help set check \"$x\" abbreviation" | |
846 | +} | |
847 | + | |
848 | +# Test help set check | |
849 | test_prefix_command_help {"set check"} { | |
850 | "Set the status of the type/range checker\.\[\r\n\]+" | |
851 | } | |
852 | + | |
853 | # test help set check range | |
854 | gdb_test "help set check range" "Set range checking\. \\(on/warn/off/auto\\)" "help set check range" | |
855 | -# test help set check type | |
856 | -gdb_test "help set check type" "Set type checking\. \\(on/warn/off/auto\\)." "help set check type" | |
857 | + | |
858 | +# Test help set check type | |
859 | +gdb_test "help set check type" "Set strict type checking\." \ | |
860 | + "help set check type" | |
861 | + | |
862 | # test help set complaints | |
863 | gdb_test "help set complaints" "Set max number of complaints about incorrect symbols\." "help set complaints" | |
864 | # test help set confirm | |
865 | @@ -487,18 +491,25 @@ gdb_test "help shell" "Execute the rest | |
866 | gdb_test "help show annotate" "Show annotation_level\.\[\r\n\]+0 == normal; 1 == fullname \\(for use when running under emacs\\)\[\r\n\]+2 == output annotated suitably for use by programs that control GDB\." "help show annotate" | |
867 | # test help show args | |
868 | gdb_test "help show args" "Show argument list to give program being debugged when it is started\.\[\r\n\]+Follow this command with any number of args, to be passed to the program\." | |
869 | -# test help show check "c" abbreviation | |
870 | -test_prefix_command_help {"show c" "show check"} { | |
871 | - "Show the status of the type/range checker\.\[\r\n\]+" | |
872 | -} "help show check \"c\" abbreviation" | |
873 | + | |
874 | +# Test help show check abbreviations | |
875 | +foreach x {"c" "check"} { | |
876 | + test_prefix_command_help [list "show $x" "show check"] { | |
877 | + "Show the status of the type/range checker\.\[\r\n\]+" | |
878 | + } "help show check \"$x\" abbreviation" | |
879 | +} | |
880 | + | |
881 | # test help show check | |
882 | test_prefix_command_help {"show check"} { | |
883 | "Show the status of the type/range checker\.\[\r\n\]+" | |
884 | } | |
885 | # test help show check range | |
886 | gdb_test "help show check range" "Show range checking\. \\(on/warn/off/auto\\)" "help show check range" | |
887 | + | |
888 | # test help show check type | |
889 | -gdb_test "help show check type" "Show type checking\. \\(on/warn/off/auto\\)" "help show check type" | |
890 | +gdb_test "help show check type" "Show strict type checking\." \ | |
891 | + "help show check type" | |
892 | + | |
893 | # test help show commands | |
894 | gdb_test "help show commands" "Show the history of commands you typed\.\[\r\n\]+You can supply a command number to start with, or a `\[+\]' to start after\[\r\n\]+the previous command number shown\." "help show commands" | |
895 | # test help show complaints | |
896 | Index: gdb-7.5.0.20120926/gdb/testsuite/gdb.base/setshow.exp | |
897 | =================================================================== | |
898 | --- gdb-7.5.0.20120926.orig/gdb/testsuite/gdb.base/setshow.exp 2012-03-13 22:02:40.000000000 +0100 | |
899 | +++ gdb-7.5.0.20120926/gdb/testsuite/gdb.base/setshow.exp 2012-09-27 22:14:41.320695336 +0200 | |
900 | @@ -110,19 +110,22 @@ gdb_test "show check range" "Range check | |
901 | #test set check range auto | |
902 | gdb_test_no_output "set check range auto" "set check range auto" | |
903 | #test show check range auto | |
904 | -gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)" | |
905 | -#test set check type on | |
906 | -gdb_test "set check type on" ".*" "set check type on" | |
907 | -#test show check type on | |
908 | -gdb_test "show check type" "Type checking is \"on\"..*" "show check type (on)" | |
909 | -#test set check type off with trailing space | |
910 | -gdb_test_no_output "set check type off " "set check type off" | |
911 | -#test show check type off | |
912 | -gdb_test "show check type" "Type checking is \"off\"..*" "show check type (off)" | |
913 | -#test set check type auto | |
914 | -gdb_test_no_output "set check type auto" "set check type auto" | |
915 | -#test show check type | |
916 | -gdb_test "show check type" "Type checking is \"auto; currently .*" "show check type (auto)" | |
917 | +gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)" | |
918 | + | |
919 | +# Test set check type on | |
920 | +gdb_test "set check type on" ".*" "set check type on" | |
921 | + | |
922 | +# Test show check type on | |
923 | +gdb_test "show check type" "Strict type checking is on\..*" \ | |
924 | + "show check type (on)" | |
925 | + | |
926 | +# Test set check type off with trailing space | |
927 | +gdb_test_no_output "set check type off " "set check type off" | |
928 | + | |
929 | +# Test show check type off | |
930 | +gdb_test "show check type" "Strict type checking is off\..*" \ | |
931 | + "show check type (off)" | |
932 | + | |
933 | #test set complaints 100 | |
934 | gdb_test_no_output "set complaints 100" "set complaints 100" | |
935 | #test show complaints 100 | |
936 | Index: gdb-7.5.0.20120926/gdb/testsuite/gdb.cp/converts.exp | |
937 | =================================================================== | |
938 | --- gdb-7.5.0.20120926.orig/gdb/testsuite/gdb.cp/converts.exp 2012-07-10 17:18:18.000000000 +0200 | |
939 | +++ gdb-7.5.0.20120926/gdb/testsuite/gdb.cp/converts.exp 2012-09-27 22:14:41.321695337 +0200 | |
940 | @@ -70,9 +70,37 @@ gdb_test_multiple "p foo3_1 (0, 0)" $t { | |
941 | pass $t | |
942 | } | |
943 | } | |
944 | + | |
945 | gdb_test "p foo3_1 (0, 1)" \ | |
946 | "Cannot resolve function foo3_1 to any overloaded instance" | |
947 | gdb_test "p foo3_1 (0, (const char**) 1)" " = 31" | |
948 | gdb_test "p foo3_2 (0, 0)" "= 32" | |
949 | gdb_test "p foo3_2 (0, (char const**) 0)" " = 320" | |
950 | ||
951 | +# Test for strict type checking | |
952 | +set error_str "Cannot resolve function %s to any overloaded instance" | |
953 | +gdb_test "show check type" "Strict type checking is on\." | |
954 | +gdb_test "p foo1_type_check (123)" [format $error_str "foo1_type_check"] | |
955 | +gdb_test "p foo2_type_check (0, 1)" [format $error_str "foo2_type_check"] | |
956 | +gdb_test "p foo2_type_check (1, 0)" [format $error_str "foo2_type_check"] | |
957 | +gdb_test "p foo2_type_check (1, 1)" [format $error_str "foo2_type_check"] | |
958 | +gdb_test "p foo3_type_check (0, 0, 1)" [format $error_str "foo3_type_check"] | |
959 | +gdb_test "p foo3_type_check (0, 1, 0)" [format $error_str "foo3_type_check"] | |
960 | +gdb_test "p foo3_type_check (1, 0, 0)" [format $error_str "foo3_type_check"] | |
961 | +gdb_test "p foo3_type_check (0, 1, 1)" [format $error_str "foo3_type_check"] | |
962 | +gdb_test "p foo3_type_check (1, 1, 0)" [format $error_str "foo3_type_check"] | |
963 | +gdb_test "p foo3_type_check (1, 1, 1)" [format $error_str "foo3_type_check"] | |
964 | + | |
965 | +gdb_test_no_output "set check type off" | |
966 | +gdb_test "show check type" "Strict type checking is off\." | |
967 | +gdb_test "p foo1_type_check (123)" " = 1000" | |
968 | +gdb_test "p foo2_type_check (0, 1)" " = 1001" | |
969 | +gdb_test "p foo2_type_check (1, 0)" " = 1001" | |
970 | +gdb_test "p foo2_type_check (1, 1)" " = 1001" | |
971 | +gdb_test "p foo3_type_check (0, 0, 1)" " = 1002" | |
972 | +gdb_test "p foo3_type_check (0, 1, 0)" " = 1002" | |
973 | +gdb_test "p foo3_type_check (1, 0, 0)" " = 1002" | |
974 | +gdb_test "p foo3_type_check (0, 1, 1)" " = 1002" | |
975 | +gdb_test "p foo3_type_check (1, 1, 0)" " = 1002" | |
976 | +gdb_test "p foo3_type_check (1, 1, 1)" " = 1002" | |
977 | +gdb_test "p foo3_2 (1,1)" " = 32" | |
978 | Index: gdb-7.5.0.20120926/gdb/testsuite/gdb.cp/converts.cc | |
979 | =================================================================== | |
980 | --- gdb-7.5.0.20120926.orig/gdb/testsuite/gdb.cp/converts.cc 2011-10-14 22:22:50.000000000 +0200 | |
981 | +++ gdb-7.5.0.20120926/gdb/testsuite/gdb.cp/converts.cc 2012-09-27 22:14:41.322695337 +0200 | |
982 | @@ -27,6 +27,10 @@ int foo3_1 (int a, const char **b) { ret | |
983 | int foo3_2 (int a, int b) { return 32; } | |
984 | int foo3_2 (int a, const char **b) { return 320; } | |
985 | ||
986 | +int foo1_type_check (char *a) { return 1000; } | |
987 | +int foo2_type_check (char *a, char *b) { return 1001; } | |
988 | +int foo3_type_check (char *a, char *b, char *c) { return 1002; } | |
989 | + | |
990 | int main() | |
991 | { | |
992 | ||
993 | @@ -62,5 +66,9 @@ int main() | |
994 | foo3_2 (0, static_cast<char const**> (0)); | |
995 | foo3_2 (0, 0); | |
996 | ||
997 | + foo1_type_check (a); | |
998 | + foo2_type_check (a, a); | |
999 | + foo3_type_check (a, a, a); | |
1000 | + | |
1001 | return 0; // end of main | |
1002 | } |