Thanks to rarely-used glibc extensions, printf() and friends must be
assumed by optimizers to be able to change *anything*, both because the
information could be sent to a custom stream (-> calling arbitrary
functions), and because they can contain specifiers for which custom
conversion have been defined (-> calling arbitrary functions).