If I compile PETSc with complex support, all of the TAO methods are not registered.
Fare enough? not really, I can imagine at least three valid reasons to use those

1) I want to check that my code works for complex builds, even if I have pure real function evaluations. I may need complex support in other parts or the code (not when using TAO), or I just want to be a diligent PETSc developer
2) I want to test REAL gradients or Hessians using built-in capability, instead of writing my own
3) I want to use the complex differentiation trick to compute REAL gradients

Last time I checked, at least option 2) was available; However, from commit 5921d7004dad83427f45468906667b100d2e2b6e, no Tao methods are registered when PETSC_USE_COMPLEX is defined, and code like the one below fail at runtime:

TaoCreate()
TaoSetFromOption()
TaoSetObjectiveRoutine()
TaoTestGradient()

[0]PETSC ERROR: Unknown type. Check for miss-spelling or missing package: http://www.mcs.anl.gov/petsc/documentation/installation.html#external
[0]PETSC ERROR: Unable to find requested Tao type lmvm


--
Stefano