Hello all, clang 3.4 is unable to successfully compile Guile 1.8, 2.0, or master. In all cases, Guile segfaults on its first execution, while trying to generate guile-procedures.texi. The reason is that clang 3.4's C preprocessor introduces a lot of extra newlines in surprising places. Our snarfing macros are unable to cope with this, and lots of initialization code is lost. For example, ports.c contains: SCM_VARIABLE (default_conversion_strategy_var, "%default-port-conversion-strategy"); Here's the definition of SCM_VARIABLE from snarf.h: --8<---------------cut here---------------start------------->8--- #define SCM_VARIABLE(c_name, scheme_name) \ SCM_SNARF_HERE(static SCM c_name) \ SCM_SNARF_INIT(c_name = scm_c_define (scheme_name, SCM_BOOL_F);) --8<---------------cut here---------------end--------------->8--- When guile-snarf is run to generate ports.x, SCM_MAGIC_SNARF_INITS is defined, so the following definitions are active: --8<---------------cut here---------------start------------->8--- # define SCM_SNARF_HERE(X) # define SCM_SNARF_INIT_PREFIX ^^ # define SCM_SNARF_INIT(X) SCM_SNARF_INIT_PREFIX X ^:^ # define SCM_SNARF_DOCS(TYPE, CNAME, FNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING) --8<---------------cut here---------------end--------------->8--- So you might expect the definition of 'default_conversion_strategy_var' in ports.c to expand into something like this: --8<---------------cut here---------------start------------->8--- ^^ default_conversion_strategy_var = scm_c_define ("%default-port-conversion-strategy", SCM_BOOL_F); ^:^ --8<---------------cut here---------------end--------------->8--- However, clang -E inserts 6 newlines between the open paren and the open quote above. Unfortunately, afaict, the 'sed' script in the 'modern_snarf' function in 'guile-snarf' cannot cope with any newlines between the "^^" and "^:^". I've attached a diff between the .x files generated by gcc vs clang. Any suggestions on how best to fix this? Mark