I believe I've found a bug in checkpatch.pl where an EXPORT_SYMBOL for an initialized struct following a simple #define without an intervening blank line falsely reports that EXPORT_SYMBOL doesn't follow the symbol definition. Here's an example: #define SOMETHING_ELSE 1 struct blah foo = { .a = 1 }; EXPORT_SYMBOL(foo); You can see from the debug print that the full statement has not been identified. FOO A<+EXPORT_SYMBOL(foo);> stat<+ .a = 1 };> name<foo> A real world example can be found by running checkpatch.pl against drivers/iio/industrialio-core.c Unfortunately my perl skills were not sufficient to find a fix.