diff options
author | Martin v. Löwis <loewis@informatik.hu-berlin.de> | 1998-05-21 13:20:37 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-05-21 13:20:37 -0600 |
commit | 12b195d93665f8aa23b04ac6d8d0d17e93653e07 (patch) | |
tree | bc40046c9415c0c892a2ac847b8cc611b60a2c5e /gcc/tree.c | |
parent | 9e423e6db21b75a78fb1d636673bfaed94fc979f (diff) | |
download | gcc-12b195d93665f8aa23b04ac6d8d0d17e93653e07.zip gcc-12b195d93665f8aa23b04ac6d8d0d17e93653e07.tar.gz gcc-12b195d93665f8aa23b04ac6d8d0d17e93653e07.tar.bz2 |
Makefile.in (TREE_H): Add tree-check.h.
* Makefile.in (TREE_H): Add tree-check.h.
(tree-check.h, gencheck): New targets.
* gencheck.c: New file.
* tree.c (tree_check, tree_class_check): New functions.
* tree.h (TREE_CHECK, TREE_CLASS_CHECK): Define.
(TYPE_CHECK, DECL_CHECK): Define.
Modify all access macros to use generated checking macros.
From-SVN: r19934
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 72 |
1 files changed, 72 insertions, 0 deletions
@@ -4923,3 +4923,75 @@ get_set_constructor_bytes (init, buffer, wd_size) } return non_const_bits; } + +#ifdef ENABLE_CHECKING +/* Complain if the tree code does not match the expected one. */ + +tree +tree_check (node, code, file, line, nofatal) + tree node; + enum tree_code code; + char *file; + int line; + int nofatal; +{ + if (TREE_CODE (node) != code) + if (nofatal) + return 0; + else + fatal ("%s:%d: Expect %s, have %s\n", file, line, + tree_code_name[code], tree_code_name[TREE_CODE (node)]); + + return node; +} + +/* Complain if the class of the tree node does not match. */ + +tree +tree_class_check (node, cl, file, line, nofatal) + tree node; + char cl; + char *file; + int line; + int nofatal; +{ + if (TREE_CODE_CLASS (TREE_CODE (node)) != cl) + if (nofatal) + return 0; + else + fatal ("%s:%d: Expect '%c', have '%s'\n", file, line, + cl, tree_code_name[TREE_CODE (node)]); + + return node; +} +/* Complain if the node is not an expression. */ + +tree +expr_check (node, ignored, file, line, nofatal) + tree node; + int ignored; + char *file; + int line; + int nofatal; +{ + switch (TREE_CODE_CLASS (TREE_CODE (node))) + { + case 'r': + case 's': + case 'e': + case '<': + case '1': + case '2': + break; + + default: + if (nofatal) + return 0; + else + fatal ("%s:%d: Expect expression, have '%s'\n", file, line, + tree_code_name[TREE_CODE (node)]); + } + + return node; +} +#endif |