C-sparse
view release on metacpan or search on metacpan
src/sparse-0.4.4/lib.c view on Meta::CPAN
va_list args;
va_start(args, fmt);
do_error(sctx_ pos, fmt, args);
va_end(args);
}
void expression_error(SCTX_ struct expression *expr, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
do_error(sctx_ expr->pos->pos, fmt, args);
va_end(args);
expr->ctype = &sctxp bad_ctype;
}
void error_die(SCTX_ struct position pos, const char * fmt, ...)
{
va_list args;
va_start(args, fmt);
do_warn(sctx_ "error: ", pos, fmt, args);
va_end(args);
exit(1);
}
void sparse_die(SCTX_ const char *fmt, ...)
{
va_list args;
static char buffer[512];
va_start(args, fmt);
vsnprintf(buffer, sizeof(buffer), fmt, args);
va_end(args);
fprintf(stderr, "%s\n", buffer);
exit(1);
}
#ifndef DO_CTX
static struct token *pre_buffer_begin = NULL;
static struct token *pre_buffer_end = NULL;
int Waddress_space = 1;
int Wbitwise = 0;
int Wcast_to_as = 0;
int Wcast_truncate = 1;
int Wcontext = 1;
int Wdecl = 1;
int Wdeclarationafterstatement = -1;
int Wdefault_bitfield_sign = 0;
int Wdesignated_init = 1;
int Wdo_while = 0;
int Winit_cstring = 0;
int Wenum_mismatch = 1;
int Wnon_pointer_null = 1;
int Wold_initializer = 1;
int Wone_bit_signed_bitfield = 1;
int Wparen_string = 0;
int Wptr_subtraction_blows = 0;
int Wreturn_void = 0;
int Wshadow = 0;
int Wtransparent_union = 0;
int Wtypesign = 0;
int Wundef = 0;
int Wuninitialized = 1;
int Wvla = 1;
int dbg_entry = 0;
int dbg_dead = 0;
int preprocess_only;
enum standard_enum standard = STANDARD_GNU89;
#endif
/* ctx.h:
#ifdef __x86_64__
#define ARCH_M64_DEFAULT 1
#else
#define ARCH_M64_DEFAULT 0
#endif
*/
#ifndef DO_CTX
int arch_m64 = ARCH_M64_DEFAULT;
int arch_msize_long = 0;
/*#define CMDLINE_INCLUDE 20*//*ctx.h*/
static int cmdline_include_nr = 0;
static char *cmdline_include[CMDLINE_INCLUDE];
#endif
void add_pre_buffer(SCTX_ int idx, const char *fmt, ...)
{
va_list args;
unsigned int size;
struct token *begin, *end;
char buffer[4096];
struct expansion *e;
va_start(args, fmt);
size = vsnprintf(buffer, sizeof(buffer), fmt, args);
va_end(args);
e = tokenize_buffer(sctx_ buffer, idx, size, &end);
begin = e->s;
if (!sctxp pre_buffer_begin)
sctxp pre_buffer_begin = begin;
if (sctxp pre_buffer_end)
sctxp pre_buffer_end->next = begin;
sctxp pre_buffer_end = end;
}
static char **handle_switch_D(SCTX_ char *arg, char **next)
{
const char *name = arg + 1;
const char *value = "1";
if (!*name || isspace(*name))
sparse_die(sctx_ "argument to `-D' is missing");
src/sparse-0.4.4/lib.c view on Meta::CPAN
if (sctxp arch_m64) {
sctxp bits_in_long = 64;
sctxp max_int_alignment = 8;
sctxp bits_in_pointer = 64;
sctxp pointer_alignment = 8;
sctxp size_t_ctype = &sctxp ulong_ctype;
sctxp ssize_t_ctype = &sctxp long_ctype;
#ifdef __x86_64__
add_pre_buffer(sctx_ sctxp stream_sb->id, "#weak_define __x86_64__ 1\n");
#endif
}
}
static void handle_arch_msize_long_finalize(SCTX)
{
if (sctxp arch_msize_long) {
sctxp size_t_ctype = &sctxp ulong_ctype;
sctxp ssize_t_ctype = &sctxp long_ctype;
}
}
static void handle_arch_finalize(SCTX)
{
handle_arch_m64_finalize(sctx );
handle_arch_msize_long_finalize(sctx );
}
static char **handle_switch_o(SCTX_ char *arg, char **next)
{
if (!strcmp (arg, "o")) { // "-o foo"
if (!*++next)
sparse_die(sctx_ "argument to '-o' is missing");
}
// else "-ofoo"
return next;
}
#ifndef DO_CTX
static const struct warning warnings[WCNT] = {
{ "address-space", &Waddress_space },
{ "bitwise", &Wbitwise },
{ "cast-to-as", &Wcast_to_as },
{ "cast-truncate", &Wcast_truncate },
{ "context", &Wcontext },
{ "decl", &Wdecl },
{ "declaration-after-statement", &Wdeclarationafterstatement },
{ "default-bitfield-sign", &Wdefault_bitfield_sign },
{ "designated-init", &Wdesignated_init },
{ "do-while", &Wdo_while },
{ "enum-mismatch", &Wenum_mismatch },
{ "init-cstring", &Winit_cstring },
{ "non-pointer-null", &Wnon_pointer_null },
{ "old-initializer", &Wold_initializer },
{ "one-bit-signed-bitfield", &Wone_bit_signed_bitfield },
{ "paren-string", &Wparen_string },
{ "ptr-subtraction-blows", &Wptr_subtraction_blows },
{ "return-void", &Wreturn_void },
{ "shadow", &Wshadow },
{ "transparent-union", &Wtransparent_union },
{ "typesign", &Wtypesign },
{ "undef", &Wundef },
{ "uninitialized", &Wuninitialized },
{ "vla", &Wvla },
};
#endif
enum {
WARNING_OFF,
WARNING_ON,
WARNING_FORCE_OFF
};
static char **handle_onoff_switch(SCTX_ char *arg, char **next, const struct warning *warnings, int n)
{
int flag = WARNING_ON;
char *p = arg + 1;
unsigned i;
if (!strcmp(p, "sparse-all")) {
for (i = 0; i < n; i++) {
if (*warnings[i].flag != WARNING_FORCE_OFF)
*warnings[i].flag = WARNING_ON;
}
}
// Prefixes "no" and "no-" mean to turn warning off.
if (p[0] == 'n' && p[1] == 'o') {
p += 2;
if (p[0] == '-')
p++;
flag = WARNING_FORCE_OFF;
}
for (i = 0; i < n; i++) {
if (!strcmp(p,warnings[i].name)) {
*warnings[i].flag = flag;
return next;
}
}
// Unknown.
return NULL;
}
static char **handle_switch_W(SCTX_ char *arg, char **next)
{
char ** ret = handle_onoff_switch(sctx_ arg, next, sctxp warnings, WCNT /*ARRAY_SIZE(warnings)*/);
if (ret)
return ret;
// Unknown.
return next;
}
#ifndef DO_CTX
static struct warning debugs[] = {
{ "entry", &dbg_entry},
{ "dead", &dbg_dead},
( run in 0.486 second using v1.01-cache-2.11-cpan-99c4e6809bf )