By simply trying such a code in dolfin, you obtain an error message:
from dolfin import *
mesh = UnitSquareMesh(10,10)
V = FunctionSpace(mesh, "CG", 1)
phi = Function(V)
W = VectorFunctionSpace(mesh, "CG", 1)
w = Function(W)
f = inner( outer(grad(phi) , grad(phi)) , grad(w) )*dx
f2 =inner(grad(phi)*grad(phi) , grad(w))*dx
Invalid ranks 1 and 1 in product.
Traceback (most recent call last):
File "outer.py", line 10, in <module>
f =inner(grad(phi)*grad(phi) , grad(w))*dx
File "/usr/local/lib/python3.6/dist-packages/ufl/exproperators.py", line 182, in _mul
return _mult(self, o)
File "/usr/local/lib/python3.6/dist-packages/ufl/exproperators.py", line 156, in _mult
error("Invalid ranks {0} and {1} in product.".format(r1, r2))
File "/usr/local/lib/python3.6/dist-packages/ufl/log.py", line 158, in error
raise self._exception_type(self._format_raw(*message))
ufl.log.UFLException: Invalid ranks 1 and 1 in product.