[LTP] [RFC PATCH v3 2/2] Start libclang based analyzer and TEST() check

Richard Palethorpe rpalethorpe@suse.de
Mon Jun 14 16:25:39 CEST 2021


Hello,

Petr Vorel <pvorel@suse.cz> writes:

> Hi Richie,
>
>> Hi Richie,
>
>> > +#if HAVE_CLANG_C_INDEX_H
>> > +
>> > +#include <clang-c/Index.h>
>> ...
>
>> > +static void emit_error(const char *const error_msg)
>> > +{
>> > +	if (color_enabled(STDERR_FILENO)) {
>> > +		dprintf(STDERR_FILENO,
>> > +			"%sERROR%s: %s%s%s\n",
>> > +			ansi_red, ansi_reset,
>> > +			ansi_bold, error_msg, ansi_reset);
>> > +	} else {
>> > +		dprintf(STDERR_FILENO, "ERROR: %s\n", error_msg);
>> > +	}
>> > +}
>> ...
>> > +	if (ret != CXError_Success) {
>> > +		emit_error("Failed to parse translation unit!");
>> > +		return 1;
>> > +	}
>> ...
>
>> > +#else
>> > +
>> > +int main(const attr_unused int argc, const attr_unused char *const *const argv)
>> > +{
>> > +	emit_error("clang-checks was not built correctly; libclang headers are not installed!\n");
>> emit_error() is not visible here, thus build fails. Please add it
>before HAVE_CLANG_C_INDEX_H.

+1

Uhg.

>
>> Or you could just use tst_test.h with TST_NO_DEFAULT_MAIN and here would be TST_TEST_TCONF()
>> (+ LTP_ATTRIBUTE_UNUSED).
>
> ...
>> > +/* Copied from lib/tst_ansi_color.c */
>> > +static int color_enabled(const int fd)
>
> Also you'd probably get tst_color_enabled() and other things from
> lib/tst_ansi_color.c for color handling for free when using
> tst_test.h.

We would probably have to build the ltplib with HOSTCC. I don't think we
can just include the headers.

It is tempting, but it also seems very circular. I can imagine someone
half refactoring a library and wanting to run the checks on one
translation unit. However Make would detect a dependency has changed, so
would try to rebuild the checker with a broken ltplib...

We could probably make it work, but having the checker depend on the
thing it checks seems like a recipe for complication. Meanwhile we just
get to share a few macros and string constants.

>
> But that's just a minor detail.
>
> Kind regards,
> Petr
>
>> Kind regards,
>> Petr
>
>> > +	return 1;
>> > +}
>> > +
>> > +#endif


-- 
Thank you,
Richard.


More information about the ltp mailing list