diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-05-21 19:20:37 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-05-21 19:20:37 +0000 |
commit | 3e207e38a7f4e4297bfa720a35bd5047a2e0d7fe (patch) | |
tree | bc40046c9415c0c892a2ac847b8cc611b60a2c5e /gcc/tree.c | |
parent | 3245cd4f3ecba3217d5d170fc67739415880e1cf (diff) | |
download | gcc-3e207e38a7f4e4297bfa720a35bd5047a2e0d7fe.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@19934 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c index 04bf8a31871..41704ad6dcf 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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 |