https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78221
--- Comment #4 from janus at gcc dot gnu.org --- Luckily, it seems that the generated code is correct after all and the imaginary part is in fact *not* discarded, as shown by this small test: complex, parameter :: i = (0.,1.) print *,i print *,(i) end This triggers the same warnings as comment 0 and prints: (0.00000000,1.00000000) (0.00000000,1.00000000) i.e. both expressions, with or without parentheses, yield the same result, as expected. Thus it's only a diagnostics problem, not wrong code.