It is unfortunate that it is still not possible to write this operation in an equivalent standard-conforming way.
c(j,j)%re = c(j,j)%re + dot_product(a(:,j)%re,b(:,j)%re) + dot_product(a(:,j)%im,b(:,j)%im)
is close, but there are two function calls instead of one. Also, I remember a previous discussion about %re and %im where some compilers generate temp arrays for the argument association, which would be problematic for efficiency.