The core of this question is how you define 'empty'. Your code will raise as an issue
any catch block, and that posted by Elina, any catch block that does not contain a throw*. Catch blocks that do nothing except call a method (e.g. a log function) or even just set a field or return a value (error conditions in asynchronous handlers, perhaps) are acceptable and shouldn't throw a style violation (unless you have a policy against them).
You need to actually inspect the contents of the catch block (I don't remember if that is before or after the catch opcode, I haven't played with this stuff), and see if it hits your definition of 'empty'. I recommend that 'empty' means no return statements, assignments (checking if a local variable is later used is too hard to be worth it) or method calls (instance or static).
(*: actually, any function which has at least one catch and no throw after the catch. For example this would pass:
void ContrivedExample(){
int a = 42;
try { a = 5 / 0; } catch {}
throw new ArgumentException();
}
)