O problema é com a ordem em que os argumentos são passados para o compilador.
Em Oneiric, as bibliotecas vinculadas devem ser chamadas após o nome do arquivo de origem:
gcc test.c -lm
Esta alteração e as razões para isso estão descritas em mais detalhes aqui .
O problema não aparece para funções de valores constantes porque o gcc tem versões internas delas. Portanto, a compilação com -fno-builtin
fornece o mesmo erro que uma variável no argumento.
Obrigado pelo Jason Conti por esta informação.