trvrfy uses now verification flags
[libfirm] / ir / tr / trvrfy.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/tr/trvrfy.h
4  * Purpose:     Check types and entities for correctness.
5  * Author:      Michael Beck, Goetz Lindenmaier
6  * Modified by:
7  * Created:     29.1.2003
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2003 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12 #ifndef TRVRFY_H
13 #define TRVRFY_H
14
15 #include "firm_types.h"
16
17 /**
18  * @file trvrfy.h
19  *
20  * Methods to verify the type representations.
21  *
22  * @author Michael Beck, Goetz Lindenmaier
23  *
24  * Methods to verify the type representations.
25  * Copyright 2003 University of Karlsruhe.
26  * Created 29.1.2003.
27  *
28  */
29
30 /**
31  * possible trvrfy() error codes
32  */
33 enum trvrfy_error_codes {
34   no_error                          = 0, /**< no error */
35   error_ent_not_cont                = 1, /**< overwritten entity not in superclass */
36   error_null_mem                    = 2, /**< compound contains NULL member */
37   error_const_on_wrong_irg          = 3, /**< constant placed on wrong IRG */
38   error_existent_entity_without_irg = 4, /**< Method entities with pecularity_exist must have an irg */
39   error_wrong_ent_overwrites        = 5, /**< number of entity overwrites exceeds number of class overwrites */
40   error_inherited_ent_without_const = 6, /**< inherited method entity not pointing to existent entity */
41   error_glob_ent_allocation         = 7, /**< wrong allocation of a global entity */
42   error_ent_const_mode              = 8  /**< Mode of constant in entity did not match entities type. */
43 };
44
45 /**
46  * Checks a type.
47  *
48  * @return
49  *  0   if no error encountered
50  */
51 int check_type(ir_type *tp);
52
53 /**
54  * Check an entity. Currently, we check only if initialized constants
55  * are build on the const irg graph.
56  *
57  * @return
58  *  0   if no error encountered
59  *  != 0    a trvrfy_error_codes code
60  */
61 int check_entity(entity *ent);
62
63 /**
64  * Walks the type information and performs a set of sanity checks.
65  *
66  * Currently, the following checks are executed:
67  * - values of initialized entities must be allocated on the constant IRG
68  * - class types: doesn't have NULL members
69  * - class types: all overwrites are existent in the super type
70  *
71  * @return
72  *    0 if graph is correct
73  *    else error code.
74  */
75 int tr_vrfy(void);
76
77 /**
78  * If NDEBUG is defined performs nothing, else calls the tr_vrfy() function.
79  */
80 #ifdef NDEBUG
81 #define TR_VRFY()       0
82 #else
83 #define TR_VRFY()       tr_vrfy()
84 #endif
85
86 #endif /* TRVRFY_H */