digitalmars.D - Clang of LLVM 2.9
- bearophile (112/112) Apr 25 2011 LLVM 2.9 is out (since some days), and for the first time Clang is avail...
- Daniel Gibson (3/5) Apr 25 2011 Does it support exceptions on Windows?
- bearophile (8/10) Apr 25 2011 I have just tried it with this (fixing the output):
LLVM 2.9 is out (since some days), and for the first time Clang is available
for Windows. Beside normal warnings has a "--analyze" option that performs more
static tests on the code. Being a young feature it's surely not as powerful as
a lint (as split, that's free, splint.org ), but it's better than just a C
compiler.
I have tried Clang on some little pieces of wrong C code, and later on larger C
programs. It outputs quite colorful error messages (here you see no colors). It
compiles C++ code too, with Clang++.
---------------------------
int main() {
int x;
return 0;
}
...>clang -Wall temp.c -o temp
temp.c:2:9: warning: unused variable 'x' [-Wunused-variable]
int x;
^
1 warning generated.
---------------------------
int main() {
int x;
x = 10;
return 0;
}
...>clang -Wall -Wextra --analyze temp.c -o temp
temp.c:3:5: warning: Value stored to 'x' is never read
x = 10;
^ ~~
1 warning generated.
---------------------------
#include <stdlib.h>
int main(int argc, char **argv) {
int *p = malloc(10 * sizeof(int));
return 0;
}
...>clang --analyze temp.c -o temp
temp.c:4:8: warning: Value stored to 'p' during its initialization is never read
int *p = malloc(10 * sizeof(int));
^ ~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
---------------------------
#include <stdlib.h>
int main(int argc, char **argv) {
int *q;
q[5] = 1;
return 0;
}
...>clang --analyze temp.c -o temp
temp.c:5:3: warning: Dereference of undefined pointer value
q[5] = 1;
^
1 warning generated.
---------------------------
#include <stdlib.h>
int main(int argc, char **argv) {
int *q = NULL;
q[5] = 1;
return 0;
}
...>clang --analyze temp.c -o temp
temp.c:5:3: warning: Array access (from variable 'q') results in a null pointer
dereference
q[5] = 1;
^
1 warning generated.
---------------------------
#include <stdio.h>
void f(int a) {
int b;
//if (a > 0) b = 1;
if (a > 5) printf("%d", b);
}
int main() {
return 0;
}
...>clang --analyze temp.c -o temp
temp.c:6:14: warning: Function call argument is an uninitialized value
if (a > 5) printf("%d", b);
^ ~
1 warning generated.
---------------------------
#include <stdio.h>
void f(int a) {
int b;
if (a > 0) b = 1;
if (a > 5) printf("%d", b);
}
int main() {
return 0;
}
No errors.
---------------------------
#include <stdio.h>
int sqr(int x, int y) {
return x * x;
}
int main() {
return 0;
}
...>clang -Wall -Wextra temp.c -o temp
temp.c:3:20: warning: unused parameter 'y' [-Wunused-parameter]
int sqr(int x, int y) {
^
1 warning generated.
---------------------------
typedef unsigned int UINT;
int main(int argc, char **argv) {
UINT x = 10;
if (x == argc) return 1;
return 0;
}
...>clang -Wall -Wextra temp.c -o temp
temp.c:4:9: warning: comparison of integers of different signs: 'UINT' (aka
'unsigned int') and 'int'
[-Wsign-compare]
if (x == argc) return 1;
~ ^ ~~~~
---------------------------
Bye,
bearophile
Apr 25 2011
Am 26.04.2011 03:59, schrieb bearophile:LLVM 2.9 is out (since some days), and for the first time Clang is available for Windows. It compiles C++ code too, with Clang++.Does it support exceptions on Windows? AFAIK that wasn't supported in older LLVM versions (and thus in LDC).
Apr 25 2011
Daniel Gibson:Does it support exceptions on Windows? AFAIK that wasn't supported in older LLVM versions (and thus in LDC).I have just tried it with this (fixing the output): https://alioth.debian.org/scm/viewvc.php/*checkout*/shootout/bench/except/except.gcc?revision=1.1.1.1&root=shootout At runtime the program stops quickly with a message like: terminate called after throwing an instance of '...' So I think it throws exceptions but doesn't catch them :-( Bye, bearophile
Apr 25 2011








bearophile <bearophileHUGS lycos.com>