Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove 0-size and variable size array members #13945

Merged
merged 1 commit into from
Nov 14, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions src/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,8 @@ int jl_field_index(jl_datatype_t *t, jl_sym_t *fld, int err)
}
}
if (err)
jl_errorf("type %s has no field %s", t->name->name->name, fld->name);
jl_errorf("type %s has no field %s", jl_symbol_name(t->name->name),
jl_symbol_name(fld));
return -1;
}

Expand Down Expand Up @@ -370,7 +371,7 @@ static uptrint_t hash_symbol(const char *str, size_t len)

static size_t symbol_nbytes(size_t len)
{
return (sizeof_jl_taggedvalue_t+sizeof(jl_sym_t)+len+1+7)&-8;
return (sizeof_jl_taggedvalue_t + sizeof(jl_sym_t) + len + 1 + 7) & -8;
}

static jl_sym_t *mk_symbol(const char *str, size_t len)
Expand All @@ -387,20 +388,20 @@ static jl_sym_t *mk_symbol(const char *str, size_t len)
}

#ifdef MEMDEBUG
sym = (jl_sym_t*)&((jl_taggedvalue_t*)malloc(nb))->value;
sym = (jl_sym_t*)jl_valueof(malloc(nb));
#else
if (sym_pool == NULL || pool_ptr+nb > sym_pool+SYM_POOL_SIZE) {
sym_pool = (char*)malloc(SYM_POOL_SIZE);
pool_ptr = sym_pool;
}
sym = (jl_sym_t*)&((jl_taggedvalue_t*)pool_ptr)->value;
sym = (jl_sym_t*)jl_valueof(pool_ptr);
pool_ptr += nb;
#endif
jl_set_typeof(sym, jl_sym_type);
sym->left = sym->right = NULL;
sym->hash = hash_symbol(str, len);
memcpy(&sym->name[0], str, len);
sym->name[len] = 0;
memcpy(jl_symbol_name(sym), str, len);
jl_symbol_name(sym)[len] = 0;
return sym;
}

Expand All @@ -414,8 +415,8 @@ static jl_sym_t **symtab_lookup(jl_sym_t **ptree, const char *str, size_t len, j
while (*ptree != NULL) {
x = (int)(h-(*ptree)->hash);
if (x == 0) {
x = strncmp(str, (*ptree)->name, len);
if (x == 0 && (*ptree)->name[len] == 0)
x = strncmp(str, jl_symbol_name(*ptree), len);
if (x == 0 && jl_symbol_name(*ptree)[len] == 0)
return ptree;
}
if (parent != NULL) *parent = *ptree;
Expand Down Expand Up @@ -600,11 +601,11 @@ jl_datatype_t *jl_new_datatype(jl_sym_t *name, jl_datatype_t *super,
if (!jl_boot_file_loaded && jl_is_symbol(name)) {
// hack to avoid making two versions of basic types needed
// during bootstrapping
if (!strcmp(((jl_sym_t*)name)->name, "Int32"))
if (!strcmp(jl_symbol_name((jl_sym_t*)name), "Int32"))
t = jl_int32_type;
else if (!strcmp(((jl_sym_t*)name)->name, "Int64"))
else if (!strcmp(jl_symbol_name((jl_sym_t*)name), "Int64"))
t = jl_int64_type;
else if (!strcmp(((jl_sym_t*)name)->name, "Bool"))
else if (!strcmp(jl_symbol_name((jl_sym_t*)name), "Bool"))
t = jl_bool_type;
}
if (t == NULL)
Expand Down Expand Up @@ -850,7 +851,7 @@ DLLEXPORT jl_value_t *jl_new_box(jl_value_t *v)
jl_value_t *box = (jl_value_t*)jl_gc_alloc_1w();
jl_set_typeof(box, jl_box_any_type);
// if (v) jl_gc_wb(box, v); // write block not needed: box was just allocated
box->fieldptr[0] = v;
*(jl_value_t**)box = v;
return box;
}

Expand Down
2 changes: 1 addition & 1 deletion src/ast.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ static value_t julia_to_list2(jl_value_t *a, jl_value_t *b)
static value_t julia_to_scm_(jl_value_t *v)
{
if (jl_is_symbol(v))
return symbol(((jl_sym_t*)v)->name);
return symbol(jl_symbol_name((jl_sym_t*)v));
if (jl_is_gensym(v)) {
size_t idx = ((jl_gensym_t*)v)->id;
size_t i;
Expand Down
46 changes: 24 additions & 22 deletions src/builtins.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,9 @@ void NORETURN jl_type_error(const char *fname, jl_value_t *expected, jl_value_t

DLLEXPORT void NORETURN jl_undefined_var_error(jl_sym_t *var)
{
if (var->name[0] == '#') {
if (jl_symbol_name(var)[0] == '#') {
// convention for renamed variables: #...#original_name
char *nxt = strchr(var->name+1, '#');
char *nxt = strchr(jl_symbol_name(var) + 1, '#');
if (nxt)
var = jl_symbol(nxt+1);
}
Expand Down Expand Up @@ -519,7 +519,7 @@ JL_CALLABLE(jl_f_kwcall)
jl_function_t *sorter = ((jl_methtable_t*)f->env)->kwsorter;
if (sorter == NULL) {
jl_exceptionf(jl_argumenterror_type, "function %s does not accept keyword arguments",
jl_gf_name(f)->name);
jl_symbol_name(jl_gf_name(f)));
}

for(size_t i=0; i < nkeys*2; i+=2) {
Expand Down Expand Up @@ -562,12 +562,13 @@ DLLEXPORT jl_value_t *jl_toplevel_eval_in_warn(jl_module_t *m, jl_value_t *ex, i
jl_module_t *task_last_m = jl_current_task->current_module;
if (!delay_warn && jl_options.incremental && jl_generating_output()) {
if (m != last_m) {
jl_printf(JL_STDERR, "WARNING: eval from module %s to %s: \n", m->name->name, last_m->name->name);
jl_printf(JL_STDERR, "WARNING: eval from module %s to %s: \n",
jl_symbol_name(m->name), jl_symbol_name(last_m->name));
jl_static_show(JL_STDERR, ex);
jl_printf(JL_STDERR, "\n ** incremental compilation may be broken for this module **\n\n");
}
else if (jl_warn_on_eval) {
jl_printf(JL_STDERR, "WARNING: eval from staged function in module %s: \n", m->name->name);
jl_printf(JL_STDERR, "WARNING: eval from staged function in module %s: \n", jl_symbol_name(m->name));
jl_static_show(JL_STDERR, ex);
jl_printf(JL_STDERR, "\n ** incremental compilation may be broken for these modules **\n\n");
}
Expand Down Expand Up @@ -713,7 +714,7 @@ JL_CALLABLE(jl_f_set_field)
jl_type_error("setfield!", (jl_value_t*)jl_datatype_type, v);
jl_datatype_t *st = (jl_datatype_t*)vt;
if (!st->mutabl)
jl_errorf("type %s is immutable", st->name->name->name);
jl_errorf("type %s is immutable", jl_symbol_name(st->name->name));
size_t idx;
if (jl_is_long(args[1])) {
idx = jl_unbox_long(args[1])-1;
Expand Down Expand Up @@ -764,9 +765,9 @@ JL_CALLABLE(jl_f_nfields)

// conversion -----------------------------------------------------------------

DLLEXPORT void *jl_symbol_name(jl_sym_t *s)
DLLEXPORT void *(jl_symbol_name)(jl_sym_t *s)
{
return s->name;
return jl_symbol_name(s);
}

//WARNING: THIS FUNCTION IS NEVER CALLED BUT INLINE BY CCALL
Expand Down Expand Up @@ -940,7 +941,7 @@ void jl_show(jl_value_t *stream, jl_value_t *v)
}
if (jl_show_gf==NULL || stream==NULL) {
jl_printf(JL_STDERR, " could not show value of type %s",
((jl_datatype_t*)jl_typeof(v))->name->name->name);
jl_symbol_name(((jl_datatype_t*)jl_typeof(v))->name->name));
return;
}
jl_value_t *args[2] = {stream,v};
Expand Down Expand Up @@ -1044,7 +1045,7 @@ DLLEXPORT jl_value_t *jl_new_type_constructor(jl_svec_t *p, jl_value_t *t)
static void jl_check_type_tuple(jl_value_t *t, jl_sym_t *name, const char *ctx)
{
if (!jl_is_tuple_type(t))
jl_type_error_rt(name->name, ctx, (jl_value_t*)jl_type_type, t);
jl_type_error_rt(jl_symbol_name(name), ctx, (jl_value_t*)jl_type_type, t);
}

JL_CALLABLE(jl_f_applicable)
Expand Down Expand Up @@ -1319,10 +1320,10 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
if (li->specTypes) {
n += jl_printf(out, ".");
n += jl_show_svec(out, li->specTypes->parameters,
li->name->name, "(", ")");
jl_symbol_name(li->name), "(", ")");
}
else {
n += jl_printf(out, ".%s(?)", li->name->name);
n += jl_printf(out, ".%s(?)", jl_symbol_name(li->name));
}
// The following is nice for debugging, but allocates memory and generates a lot of output
// so it may not be a good idea to to have it active
Expand All @@ -1338,7 +1339,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
n += jl_static_show_x(out, (jl_value_t*)dv->name->module, depth);
n += jl_printf(out, ".");
}
n += jl_printf(out, "%s", dv->name->name->name);
n += jl_printf(out, "%s", jl_symbol_name(dv->name->name));
if (dv->parameters && (jl_value_t*)dv != dv->name->primary &&
!jl_types_equal((jl_value_t*)dv, (jl_value_t*)jl_tuple_type)) {
size_t j, tlen = jl_nparams(dv);
Expand All @@ -1359,7 +1360,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
}
else if (vt == jl_function_type) {
if (jl_is_gf(v)) {
n += jl_printf(out, "%s", jl_gf_name(v)->name);
n += jl_printf(out, "%s", jl_symbol_name(jl_gf_name(v)));
}
else {
n += jl_printf(out, "#<function ");
Expand Down Expand Up @@ -1428,7 +1429,8 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
n += jl_static_show(out, ((jl_tvar_t*)v)->lb);
n += jl_printf(out, "<:");
}
n += jl_printf(out, "%s%s<:", (((jl_tvar_t*)v)->bound)?"#":"", ((jl_tvar_t*)v)->name->name);
n += jl_printf(out, "%s%s<:", (((jl_tvar_t*)v)->bound)?"#":"",
jl_symbol_name(((jl_tvar_t*)v)->name));
n += jl_static_show(out, ((jl_tvar_t*)v)->ub);
}
else if (vt == jl_module_type) {
Expand All @@ -1437,22 +1439,22 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
n += jl_static_show_x(out, (jl_value_t*)m->parent, depth);
n += jl_printf(out, ".");
}
n += jl_printf(out, "%s", m->name->name);
n += jl_printf(out, "%s", jl_symbol_name(m->name));
}
else if (vt == jl_sym_type) {
n += jl_printf(out, ":%s", ((jl_sym_t*)v)->name);
n += jl_printf(out, ":%s", jl_symbol_name((jl_sym_t*)v));
}
else if (vt == jl_gensym_type) {
n += jl_printf(out, "GenSym(%" PRIuPTR ")",
(uintptr_t)((jl_gensym_t*)v)->id);
}
else if (vt == jl_symbolnode_type) {
n += jl_printf(out, "%s::", jl_symbolnode_sym(v)->name);
n += jl_printf(out, "%s::", jl_symbol_name(jl_symbolnode_sym(v)));
n += jl_static_show_x(out, jl_symbolnode_type(v), depth);
}
else if (vt == jl_globalref_type) {
n += jl_static_show_x(out, (jl_value_t*)jl_globalref_mod(v), depth);
n += jl_printf(out, ".%s", jl_globalref_name(v)->name);
n += jl_printf(out, ".%s", jl_symbol_name(jl_globalref_name(v)));
}
else if (vt == jl_labelnode_type) {
n += jl_printf(out, "%" PRIuPTR ":", jl_labelnode_label(v));
Expand Down Expand Up @@ -1482,7 +1484,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
}
else if (vt == jl_linenumbernode_type) {
n += jl_printf(out, "# line %" PRIuPTR " %s",
jl_linenode_line(v), jl_linenode_file(v)->name);
jl_linenode_line(v), jl_symbol_name(jl_linenode_file(v)));
}
else if (vt == jl_expr_type) {
jl_expr_t *e = (jl_expr_t*)v;
Expand All @@ -1495,7 +1497,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
char sep = ' ';
if (e->head == body_sym)
sep = '\n';
n += jl_printf(out, "Expr(:%s", e->head->name);
n += jl_printf(out, "Expr(:%s", jl_symbol_name(e->head));
size_t i, len = jl_array_len(e->args);
for (i = 0; i < len; i++) {
n += jl_printf(out, ",%c", sep);
Expand Down Expand Up @@ -1554,7 +1556,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v,
else {
for (size_t i = 0; i < tlen; i++) {
if (!istuple) {
n += jl_printf(out, "%s", ((jl_sym_t*)jl_svecref(vt->name->names, i))->name);
n += jl_printf(out, "%s", jl_symbol_name((jl_sym_t*)jl_svecref(vt->name->names, i)));
//jl_fielddesc_t f = t->fields[i];
n += jl_printf(out, "=");
}
Expand Down
8 changes: 4 additions & 4 deletions src/ccall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ static native_sym_arg_t interpret_symbol_arg(jl_value_t *arg, jl_codectx_t *ctx,
ptr = jl_fieldref(ptr,0);
}
if (jl_is_symbol(ptr))
f_name = ((jl_sym_t*)ptr)->name;
f_name = jl_symbol_name((jl_sym_t*)ptr);
else if (jl_is_byte_string(ptr))
f_name = jl_string_data(ptr);
if (f_name != NULL) {
Expand All @@ -374,13 +374,13 @@ static native_sym_arg_t interpret_symbol_arg(jl_value_t *arg, jl_codectx_t *ctx,
jl_value_t *t0 = jl_fieldref(ptr,0);
jl_value_t *t1 = jl_fieldref(ptr,1);
if (jl_is_symbol(t0))
f_name = ((jl_sym_t*)t0)->name;
f_name = jl_symbol_name((jl_sym_t*)t0);
else if (jl_is_byte_string(t0))
f_name = jl_string_data(t0);
else
JL_TYPECHKS(fname, symbol, t0);
if (jl_is_symbol(t1))
f_lib = ((jl_sym_t*)t1)->name;
f_lib = jl_symbol_name((jl_sym_t*)t1);
else if (jl_is_byte_string(t1))
f_lib = jl_string_data(t1);
else
Expand Down Expand Up @@ -891,7 +891,7 @@ static jl_cgval_t emit_ccall(jl_value_t **args, size_t nargs, jl_codectx_t *ctx)
jl_undefvarerror_type)
&& jl_is_symbol(args[2])) {
std::string msg = "ccall return type undefined: " +
std::string(((jl_sym_t*)args[2])->name);
std::string(jl_symbol_name((jl_sym_t*)args[2]));
emit_error(msg.c_str(), ctx);
JL_GC_POP();
return jl_cgval_t();
Expand Down
27 changes: 14 additions & 13 deletions src/cgutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,11 +363,11 @@ static DIType julia_type_to_di(jl_value_t *jt, DIBuilder *dbuilder, bool isboxed
if (jl_is_bitstype(jt)) {
uint64_t SizeInBits = jdt == jl_bool_type ? 1 : 8*jdt->size;
#ifdef LLVM37
llvm::DIType *t = dbuilder->createBasicType(jdt->name->name->name,SizeInBits,8*jdt->alignment,llvm::dwarf::DW_ATE_unsigned);
llvm::DIType *t = dbuilder->createBasicType(jl_symbol_name(jdt->name->name),SizeInBits,8*jdt->alignment,llvm::dwarf::DW_ATE_unsigned);
jdt->ditype = t;
return t;
#else
DIType t = dbuilder->createBasicType(jdt->name->name->name,SizeInBits,8*jdt->alignment,llvm::dwarf::DW_ATE_unsigned);
DIType t = dbuilder->createBasicType(jl_symbol_name(jdt->name->name),SizeInBits,8*jdt->alignment,llvm::dwarf::DW_ATE_unsigned);
MDNode *M = t;
jdt->ditype = M;
return t;
Expand All @@ -379,7 +379,7 @@ static DIType julia_type_to_di(jl_value_t *jt, DIBuilder *dbuilder, bool isboxed
size_t ntypes = jl_datatype_nfields(jst);
llvm::DICompositeType *ct = dbuilder->createStructType(
NULL, // Scope
jdt->name->name->name, // Name
jl_symbol_name(jdt->name->name), // Name
NULL, // File
0, // LineNumber
8*jdt->size, // SizeInBits
Expand All @@ -396,7 +396,7 @@ static DIType julia_type_to_di(jl_value_t *jt, DIBuilder *dbuilder, bool isboxed
dbuilder->replaceArrays(ct, dbuilder->getOrCreateArray(ArrayRef<Metadata*>(Elements)));
return ct;
} else {
jdt->ditype = dbuilder->createTypedef(jl_pvalue_dillvmt, jdt->name->name->name, NULL, 0, NULL);
jdt->ditype = dbuilder->createTypedef(jl_pvalue_dillvmt, jl_symbol_name(jdt->name->name), NULL, 0, NULL);
return (llvm::DIType*)jdt->ditype;
}
#endif
Expand Down Expand Up @@ -639,22 +639,22 @@ static Value *julia_gv(const char *prefix, jl_sym_t *name, jl_module_t *mod, voi
{
// emit a GlobalVariable for a jl_value_t, using the prefix, name, and module to
// to create a readable name of the form prefixModA.ModB.name
size_t len = strlen(name->name)+strlen(prefix)+1;
size_t len = strlen(jl_symbol_name(name))+strlen(prefix)+1;
jl_module_t *parent = mod, *prev = NULL;
while (parent != NULL && parent != prev) {
len += strlen(parent->name->name)+1;
len += strlen(jl_symbol_name(parent->name))+1;
prev = parent;
parent = parent->parent;
}
char *fullname = (char*)alloca(len);
strcpy(fullname, prefix);
len -= strlen(name->name)+1;
strcpy(fullname+len,name->name);
len -= strlen(jl_symbol_name(name))+1;
strcpy(fullname + len, jl_symbol_name(name));
parent = mod;
prev = NULL;
while (parent != NULL && parent != prev) {
size_t part = strlen(parent->name->name)+1;
strcpy(fullname+len-part,parent->name->name);
size_t part = strlen(jl_symbol_name(parent->name))+1;
strcpy(fullname+len-part,jl_symbol_name(parent->name));
fullname[len-1] = '.';
len -= part;
prev = parent;
Expand Down Expand Up @@ -805,7 +805,7 @@ static Type *julia_struct_to_llvm(jl_value_t *jt, bool *isboxed)
return T_void;
StructType *structdecl;
if (!isTuple) {
structdecl = StructType::create(jl_LLVMContext, jst->name->name->name);
structdecl = StructType::create(jl_LLVMContext, jl_symbol_name(jst->name->name));
jst->struct_decl = structdecl;
}
std::vector<Type*> latypes(0);
Expand Down Expand Up @@ -916,8 +916,9 @@ static Value *emit_nthptr_recast(Value *v, Value *idx, MDNode *tbaa, Type *ptype

static Value *emit_typeptr_addr(Value *p)
{
ssize_t offset = (offsetof(jl_taggedvalue_t,value) - offsetof(jl_taggedvalue_t,type)) / sizeof(jl_value_t*);
return emit_nthptr_addr(p, -offset);
ssize_t offset = (sizeof(jl_taggedvalue_t) -
offsetof(jl_taggedvalue_t, type)) / sizeof(jl_value_t*);
return emit_nthptr_addr(p, -offset);
}

static Value *emit_typeof(Value *tt)
Expand Down
Loading