summaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-05-21 19:20:37 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-05-21 19:20:37 +0000
commit3e207e38a7f4e4297bfa720a35bd5047a2e0d7fe (patch)
treebc40046c9415c0c892a2ac847b8cc611b60a2c5e /gcc/tree.c
parent3245cd4f3ecba3217d5d170fc67739415880e1cf (diff)
downloadgcc-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.c72
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