The "die hard" means killing the thread. As opposed to letting it carry on running, possibly by returning a failure result, that calling code can then process to exit/continue gracefully. From the BUG FAQ that @don-aman referred to,
BUG_ON( condition );
is the same as
if ( condition )
BUG();
So if the condition is false then the BUG_ON does not get tripped, and the code can continue - which is why you can see more code following in that if branch in core.c . Also, you can test BUG() yourself:
>>cat h.c
#include <stdio.h>
#define BUG() __asm__ __volatile__("ud2\n")
int main()
{
printf ("hi\n");
BUG();
printf ("ho\n");
}
>>cc -o h h.c
>>./h
hi
Illegal instruction (core dumped)
>>