Print this page
new smatch
@@ -1,8 +1,9 @@
#ifndef LIB_H
#define LIB_H
+#include <stdbool.h>
#include <stdlib.h>
#include <stddef.h>
/*
* Basic helper routine descriptions for 'sparse'.
@@ -30,24 +31,29 @@
* THE SOFTWARE.
*/
#include "compat.h"
#include "ptrlist.h"
+#include "utils.h"
+#include "bits.h"
#define DO_STRINGIFY(x) #x
#define STRINGIFY(x) DO_STRINGIFY(x)
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
#endif
-extern int verbose, optimize, optimize_size, preprocessing;
+extern int verbose, optimize_level, optimize_size, preprocessing;
extern int die_if_error;
extern int parse_error;
-extern int repeat_phase, merge_phi_sources;
+extern int repeat_phase;
+extern int do_output;
extern int gcc_major, gcc_minor, gcc_patchlevel;
+extern const char *base_filename;
+
extern unsigned int hexval(unsigned int c);
struct position {
unsigned int type:6,
stream:14,
@@ -81,10 +87,12 @@
typedef struct pseudo *pseudo_t;
struct token *skip_to(struct token *, int);
struct token *expect(struct token *, int, const char *);
+void unexpected(struct token *, const char *errmsg);
+
#ifdef __GNUC__
#define FORMAT_ATTR(pos) __attribute__ ((__format__ (__printf__, pos, pos+1)))
#define NORETURN_ATTR __attribute__ ((__noreturn__))
#define SENTINEL_ATTR __attribute__ ((__sentinel__))
#else
@@ -106,17 +114,36 @@
#define ERROR_CURR_PHASE (1 << 0)
#define ERROR_PREV_PHASE (1 << 1)
extern int has_error;
+
+enum phase {
+ PASS__PARSE,
+ PASS__LINEARIZE,
+ PASS__MEM2REG,
+ PASS__OPTIM,
+ PASS__FINAL,
+};
+
+#define PASS_PARSE (1UL << PASS__PARSE)
+#define PASS_LINEARIZE (1UL << PASS__LINEARIZE)
+#define PASS_MEM2REG (1UL << PASS__MEM2REG)
+#define PASS_OPTIM (1UL << PASS__OPTIM)
+#define PASS_FINAL (1UL << PASS__FINAL)
+
+
extern void add_pre_buffer(const char *fmt, ...) FORMAT_ATTR(1);
+extern void predefine(const char *name, int weak, const char *fmt, ...) FORMAT_ATTR(3);
extern int preprocess_only;
extern int Waddress;
extern int Waddress_space;
extern int Wbitwise;
+extern int Wbitwise_pointer;
+extern int Wcast_from_as;
extern int Wcast_to_as;
extern int Wcast_truncate;
extern int Wconstant_suffix;
extern int Wconstexpr_not_const;
extern int Wcontext;
@@ -128,10 +155,11 @@
extern int Wenum_mismatch;
extern int Wexternal_function_has_definition;
extern int Wsparse_error;
extern int Wimplicit_int;
extern int Winit_cstring;
+extern int Wint_to_pointer_cast;
extern int Wmemcpy_max_count;
extern int Wnon_pointer_null;
extern int Wold_initializer;
extern int Wold_style_definition;
extern int Wone_bit_signed_bitfield;
@@ -138,13 +166,16 @@
extern int Woverride_init;
extern int Woverride_init_all;
extern int Woverride_init_whole_range;
extern int Wparen_string;
extern int Wpointer_arith;
+extern int Wpointer_to_int_cast;
extern int Wptr_subtraction_blows;
extern int Wreturn_void;
extern int Wshadow;
+extern int Wshift_count_negative;
+extern int Wshift_count_overflow;
extern int Wsizeof_bool;
extern int Wstrict_prototypes;
extern int Wtautological_compare;
extern int Wtransparent_union;
extern int Wtypesign;
@@ -152,24 +183,31 @@
extern int Wuninitialized;
extern int Wunknown_attribute;
extern int Wvla;
extern int dump_macro_defs;
+extern int dump_macros_only;
-extern int dbg_entry;
+extern int dbg_compound;
extern int dbg_dead;
+extern int dbg_domtree;
+extern int dbg_entry;
+extern int dbg_ir;
+extern int dbg_postorder;
+extern unsigned int fmax_warnings;
extern int fmem_report;
-extern int fdump_linearize;
+extern unsigned long fdump_ir;
extern unsigned long long fmemcpy_max_count;
+extern unsigned long fpasses;
+extern int funsigned_char;
extern int arch_m64;
extern int arch_msize_long;
extern int arch_big_endian;
+extern int arch_mach;
-extern void declare_builtin_functions(void);
-extern void create_builtin_stream(void);
extern void dump_macro_definitions(void);
extern struct symbol_list *sparse_initialize(int argc, char **argv, struct string_list **files);
extern struct symbol_list *__sparse(char *filename);
extern struct symbol_list *sparse_keep_tokens(char *filename);
extern struct symbol_list *sparse(char *filename);
@@ -205,23 +243,18 @@
return ptr_list_size((struct ptr_list *)(list));
}
static inline void free_instruction_list(struct instruction_list **head)
{
- free_ptr_list((struct ptr_list **)head);
+ free_ptr_list(head);
}
static inline struct instruction * delete_last_instruction(struct instruction_list **head)
{
return undo_ptr_list_last((struct ptr_list **)head);
}
-static inline struct basic_block * delete_last_basic_block(struct basic_block_list **head)
-{
- return delete_ptr_list_last((struct ptr_list **)head);
-}
-
static inline struct basic_block *first_basic_block(struct basic_block_list *head)
{
return first_ptr_list((struct ptr_list *)head);
}
static inline struct instruction *last_instruction(struct instruction_list *head)