Right now, Portage can't handle overwriting a symlink with a directory, even if it knows that the package installed said symlink (no risk of overwriting something from the user then). PMS says: 1) "Ebuilds must not attempt to merge a directory on top of any existing file that is not either a directory or a symlink to a directory." [0] 2) "Ebuilds must not attempt to merge a regular file on top of any existing file that is not either a regular file or a symlink to a regular file." [1] The first bug I remember hitting this is android-studio (bug 815118) but I'm sure there's been some before that. I don't think there were any substantial objections to this idea in that bug, other than it not being an immediate solution for that package given it needed to be implemented & propagate to users (and the same is true for Squid now). [0] https://dev.gentoo.org/~ulm/pms/head/pms.html#x1-14000013.2 [1] https://dev.gentoo.org/~ulm/pms/head/pms.html#x1-14300013.3
To be clear: Portage currently will reject replacing a symlink to a directory with a directory and vice-versa, but it looks like it'd be valid for it to introspect whether the package owns both and do the replacement itself if so.
I also have hit this some times, I see also some ebuilds in the tree workarounding the problem by removing the directory at pkg_preinst phase :/