Acho que a resposta do @ DavidPostill é a correta, mas se quiser manter a distinção entre avisos e erros, bem como detectar notas, você pode adicionar 2>err ao final do comando gcc :
gcc -O3 -o hello hello.c
Depois faça seu teste:
if [ $? -eq 0 -a ! -s err ]