Re: Has anyone used CLANG yet?

From: "A(dot)M(dot)" <agentm(at)themactionfaction(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Has anyone used CLANG yet?
Date: 2009-12-09 22:17:14
Message-ID: F6D8F5F8-B57B-4A4D-ABC8-C2719B9B83AD@themactionfaction.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On Dec 9, 2009, at 4:23 PM, Chris Browne wrote:

> This is a C front end for the LLVM compiler... I noticed that it
> entered Debian/Unstable today:
>
> http://packages.debian.org/sid/main/clang
>
> I thought it would be interesting to see if PostgreSQL compiles with
> this, as an alternative compiler that should presumably become more and
> more available on Linux et al. (And I suppose that the randomly
> selected .sig is supremely apropos!)
>
> configure blows up here at the following:
>
> conftest.c:75:28: error: invalid token after top level declarator
> extern unsigned int PASCAL accept (unsigned int, void *, void *);
>
> I suspect there's something about PASCAL that's a problem, as clang is
> nominally supposed to be a C compiler ;-).
>
> I haven't looked deeper, so haven't the remotest idea how deep the issue
> lies.
>
> At any rate, I should poke at this further soon, but if it seems
> interesting to others, well, CLANG is now an easy install on some number
> of systems!

Clang works for me on MacOS 10.6.2:
/Developer/usr/bin/clang --version
clang version 1.0.1 (http://llvm.org/svn/llvm-project/cfe/tags/Apple/clang-24 exported)
Target: x86_64-apple-darwin10

CC="/Developer/usr/bin/clang" ./configure --prefix=/Users/agentm/pgsql841/

make -j 8

/Users/agentm/pgsql841/initdb -E UTF8 ../data

./pg_ctl -D ../data/ start
server starting
RD07:bin agentm$ LOG: database system was shut down at 2009-12-09 17:01:51 EST
LOG: database system is ready to accept connections
LOG: autovacuum launcher started

/Users/agentm/pgsql841/psql postgres
psql (8.4.1)
Type "help" for help.

postgres=# select 1;
?column?
----------
1
(1 row)

I do see lots of warnings regarding unsupported compiler flags:

clang: warning: argument unused during compilation: '-no-cpp-precomp'
clang: warning: argument unused during compilation: '-O2'
clang: warning: argument unused during compilation: '-Wall'
clang: warning: argument unused during compilation: '-Wmissing-prototypes'
clang: warning: argument unused during compilation: '-Wpointer-arith'
clang: warning: argument unused during compilation: '-Wdeclaration-after-statement'
clang: warning: argument unused during compilation: '-Wendif-labels'
clang: warning: argument unused during compilation: '-fno-strict-aliasing'
clang: warning: argument unused during compilation: '-fwrapv'

and some code-based warnings:
print.c:1105:24: warning: field width should have type 'int', but argument has type 'unsigned int' [-Wformat]
fprintf(fout, "%-s%*s", hlineptr[line_count].ptr,
^

pl_exec.c:3529:6: warning: expression result unused [-Wunused-value]
ItemPointerSetInvalid(&(tmptup.t_self));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../src/include/storage/itemptr.h:134:2: note: instantiated from:
BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
^
../../../../src/include/storage/block.h:86:2: note: instantiated from:
AssertMacro(PointerIsValid(blockId)), \
^
../../../../src/include/postgres.h:675:39: note: instantiated from:
#define AssertMacro(condition) ((void)true)
^
../../../../src/include/c.h:185:15: note: instantiated from:
#define true ((bool) 1)

You are probably running configure with gcc, no?

FYI:
with clang: time make (not -j 8)
real 1m46.511s
user 1m26.295s
sys 0m14.639s

with gcc: time make
real 2m41.934s
user 2m20.778s
sys 0m17.441s

du -h pgsql841gcc/bin/*
52K pgsql841gcc/bin/clusterdb
52K pgsql841gcc/bin/createdb
60K pgsql841gcc/bin/createlang
52K pgsql841gcc/bin/createuser
52K pgsql841gcc/bin/dropdb
60K pgsql841gcc/bin/droplang
52K pgsql841gcc/bin/dropuser
616K pgsql841gcc/bin/ecpg
72K pgsql841gcc/bin/initdb
32K pgsql841gcc/bin/pg_config
28K pgsql841gcc/bin/pg_controldata
36K pgsql841gcc/bin/pg_ctl
280K pgsql841gcc/bin/pg_dump
68K pgsql841gcc/bin/pg_dumpall
36K pgsql841gcc/bin/pg_resetxlog
128K pgsql841gcc/bin/pg_restore
4.6M pgsql841gcc/bin/postgres
4.0K pgsql841gcc/bin/postmaster
340K pgsql841gcc/bin/psql
52K pgsql841gcc/bin/reindexdb
32K pgsql841gcc/bin/vacuumdb

du -h pgsql841/bin/* (clang build)
52K pgsql841/bin/clusterdb
52K pgsql841/bin/createdb
60K pgsql841/bin/createlang
52K pgsql841/bin/createuser
48K pgsql841/bin/dropdb
60K pgsql841/bin/droplang
48K pgsql841/bin/dropuser
612K pgsql841/bin/ecpg
72K pgsql841/bin/initdb
28K pgsql841/bin/pg_config
28K pgsql841/bin/pg_controldata
36K pgsql841/bin/pg_ctl
272K pgsql841/bin/pg_dump
68K pgsql841/bin/pg_dumpall
36K pgsql841/bin/pg_resetxlog
124K pgsql841/bin/pg_restore
4.5M pgsql841/bin/postgres
4.0K pgsql841/bin/postmaster
344K pgsql841/bin/psql
52K pgsql841/bin/reindexdb
32K pgsql841/bin/vacuumdb

Cheers,
M

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2009-12-09 22:38:38 Re: Adding support for SE-Linux security
Previous Message Greg Smith 2009-12-09 21:59:01 Re: Has anyone used CLANG yet?