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)