typecheck
was the solution for me.
If type A (A's tree.tpe) is used in compile-time reflection before its macro has been expanded, it can be expanded as soon as it is stumbled upon:
import c.universe._
import Flag._
def expandType(typeTree: Tree) = {
c.typecheck(q"type T = $typeTree") match {
case x @ TypeDef(mods, name, tparams, rhs) => rhs.tpe
}
}