diff options
| -rw-r--r-- | sparse-llvm.c | 17 | ||||
| -rw-r--r-- | validation/backend/array.c | 6 |
2 files changed, 23 insertions, 0 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 9f4586fa..a678d9cb 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -34,6 +34,20 @@ static inline bool symbol_is_fp_type(struct symbol *sym) static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym); +static LLVMTypeRef sym_array_type(LLVMModuleRef module, struct symbol *sym) +{ + LLVMTypeRef elem_type; + struct symbol *base_type; + + base_type = sym->ctype.base_type; + + elem_type = symbol_type(module, base_type); + if (!elem_type) + return NULL; + + return LLVMArrayType(elem_type, sym->bit_size / 8); +} + #define MAX_STRUCT_MEMBERS 64 static LLVMTypeRef sym_struct_type(LLVMModuleRef module, struct symbol *sym) @@ -135,6 +149,9 @@ static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym) case SYM_STRUCT: ret = sym_struct_type(module, sym); break; + case SYM_ARRAY: + ret = sym_array_type(module, sym); + break; default: assert(0); } diff --git a/validation/backend/array.c b/validation/backend/array.c new file mode 100644 index 00000000..bd3ec596 --- /dev/null +++ b/validation/backend/array.c @@ -0,0 +1,6 @@ +static char array[128]; + +/* + * check-name: Array code generation + * check-command: ./sparsec -c $file -o tmp.o + */ |
