Discussion:
ld resolving different types
(too old to reply)
Norman Goldstein
2020-02-16 00:51:14 UTC
Permalink
LD version:
   GNU ld version 2.31.1-37.fc30

Platform:
   Linux 5.4.17-100.fc30.x86_64 #1 SMP     x86_64 x86_64 x86_64 GNU/Linux

Compile/Link command:
    gcc tlink.cpp tlink2.cpp -o tlink -lstdc++

The programs compiles and links without warning or error, but resolves
/extern int foo/ with /double foo/.  The result of running the program
is, of course, garbage:

foo= -858993459

The program contains only 1 definition for foo (the extern statement is
a declaration), so the program is not violating the One Definition Rule.

Thank you.
Andreas Schwab
2020-02-16 08:06:31 UTC
Permalink
This violates the rule on type identity [basic.link], no diagnostic required.

Andreas.
--
Andreas Schwab, ***@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
Loading...