[cfe-dev] Random small issues

Timo Sirainen tss at iki.fi
Sat Oct 18 13:05:02 PDT 2008


I tried compiling Dovecot using clang. The blocker problem was that
va_arg() isn't implemented. Other than that there are a few other small
issues:

1. automake's dependency tracking doesn't work with ccc for some reason.
It always recompiles everything. I didn't bother trying to figure out
why.

2. Some small differences with ccc/clang and gcc cause warnings and
compiler errors:

// gcc thinks these types are compatible, clang doesn't
struct foo {
	int x;
};

int main(void) {
	const struct foo *src;

	if (!__builtin_types_compatible_p(struct foo, typeof(*src)))
		printf("error\n");
	return 0;
}

// noreturn attribute is useful also for function pointers, but
// clang gives a warning
static void (*fatal)(void) __attribute__((noreturn));

static void __attribute__((noreturn))
die(void)
{
	fatal();
}

int main(void) {
	fatal();
	return 0;
}

// clang gives a warning, gcc doesn't. I guess gcc figures out that
// a format argument is going in so it should also be coming out.
// That's how I also prefer it (unless there's another way to
// prevent the warning?)
static const char * __attribute__((format_arg(1)))
printf_format_fix(const char *format)
{
	// maybe modify format
	return format;
}

int main(void) {
	printf(printf_format_fix("%s"), "hello");
	return 0;
}

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20081018/3cbf2c86/attachment.sig>


More information about the cfe-dev mailing list