diff options
| author | Pekka Enberg <penberg@kernel.org> | 2011-10-25 12:03:35 +0300 |
|---|---|---|
| committer | Pekka Enberg <penberg@kernel.org> | 2011-10-25 12:27:27 +0300 |
| commit | ac1601d50ff22e2a4835ca252722ef687c7ef6d8 (patch) | |
| tree | 389023d9751bf25463e4d50c90d71c609aaf144d | |
| parent | 2b1d2bc9e6f84638d0076b6e94cf950327899496 (diff) | |
| download | sparse-dev-ac1601d50ff22e2a4835ca252722ef687c7ef6d8.tar.gz | |
sparse, llvm: Add support for array types
This patch adds support for SYM_ARRAY in symbol_type().
Cc: Christopher Li <sparse@chrisli.org>
Cc: Jeff Garzik <jgarzik@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
| -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 + */ |
