Add llc integration for LLVM IR (#979)

Check LLVM IR with llc
This commit is contained in:
Linda_pp
2017-10-10 18:13:09 +09:00
committed by w0rp
parent a809c4fa3a
commit 70177480ba
6 changed files with 157 additions and 4 deletions

View File

@@ -0,0 +1,39 @@
Before:
Save g:ale_llvm_llc_executable
unlet! g:ale_llvm_llc_executable
unlet! b:ale_llvm_llc_executable
runtime ale_linters/llvm/llc.vim
function! AssertHasPrefix(str, prefix) abort
let msg = printf("'%s' is expected to be prefixed with '%s'", a:str, a:prefix)
AssertEqual stridx(a:str, a:prefix), 0, msg
endfunction
After:
unlet! g:ale_llvm_llc_executable
unlet! b:ale_llvm_llc_executable
delfunction AssertHasPrefix
Restore
Execute(llc command is customizable):
let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
call AssertHasPrefix(cmd, ale#Escape('llc'))
let g:ale_llvm_llc_executable = 'llc-5.0'
let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
call AssertHasPrefix(cmd, ale#Escape('llc-5.0'))
let b:ale_llvm_llc_executable = 'llc-4.0'
let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
call AssertHasPrefix(cmd, ale#Escape('llc-4.0'))
Execute(GetCommand() escapes the returned path):
let b:ale_llvm_llc_executable = '/path/space contained/llc'
let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
call AssertHasPrefix(cmd, ale#Escape('/path/space contained/llc'))
Execute(GetExecutable() does not escape the returned path):
let b:ale_llvm_llc_executable = '/path/space contained/llc'
AssertEqual ale_linters#llvm#llc#GetExecutable(bufnr('')), '/path/space contained/llc'

View File

@@ -0,0 +1,56 @@
Before:
runtime! ale_linters/llvm/llc.vim
Execute(llc handler should parse errors output for STDIN):
AssertEqual
\ [
\ {
\ 'lnum': 10,
\ 'col': 7,
\ 'text': "error: value doesn't match function result type 'i32'",
\ 'type': 'E',
\ },
\ {
\ 'lnum': 10,
\ 'col': 13,
\ 'text': "error: use of undefined value '@foo'",
\ 'type': 'E',
\ },
\ ],
\ ale_linters#llvm#llc#HandleErrors(bufnr(''), [
\ "llc: <stdin>:10:7: error: value doesn't match function result type 'i32'",
\ 'ret i64 0',
\ ' ^',
\ '',
\ "llc: <stdin>:10:13: error: use of undefined value '@foo'",
\ 'call void @foo(i64 %0)',
\ ' ^',
\ ])
Execute(llc handler should parse errors output for some file):
call ale#test#SetFilename('test.ll')
AssertEqual
\ [
\ {
\ 'lnum': 10,
\ 'col': 7,
\ 'text': "error: value doesn't match function result type 'i32'",
\ 'type': 'E',
\ },
\ {
\ 'lnum': 10,
\ 'col': 13,
\ 'text': "error: use of undefined value '@foo'",
\ 'type': 'E',
\ },
\ ],
\ ale_linters#llvm#llc#HandleErrors(bufnr(''), [
\ "llc: /path/to/test.ll:10:7: error: value doesn't match function result type 'i32'",
\ 'ret i64 0',
\ ' ^',
\ '',
\ "llc: /path/to/test.ll:10:13: error: use of undefined value '@foo'",
\ 'call void @foo(i64 %0)',
\ ' ^',
\ ])