https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105810

--- Comment #8 from cqwrteur <unlvsur at live dot com> ---
(In reply to Jonathan Wakely from comment #7)
> Right, but that function doesn't even exist today, so there's nothing to
> merge today. This change adds new symbols (one for every assertion in the
> library) which must be assembled and then merged by the linker.
> 
> I'm just not sure why you're pointing this out in comment 4 like it's an
> advantage of the change. Of course there's only one copy of the function,
> otherwise it would be an ODR violation, or a linker error. But it's still
> one more function for every assertion in the library.

the thing is that.
if I ca(In reply to Jonathan Wakely from comment #7)
> Right, but that function doesn't even exist today, so there's nothing to
> merge today. This change adds new symbols (one for every assertion in the
> library) which must be assembled and then merged by the linker.
> 
> I'm just not sure why you're pointing this out in comment 4 like it's an
> advantage of the change. Of course there's only one copy of the function,
> otherwise it would be an ODR violation, or a linker error. But it's still
> one more function for every assertion in the library.

The thing is that:
https://godbolt.org/z/85M1PE9Te


The compiler has to generate
        subq    $8, %rsp
        leaq    .LC0(%rip), %rcx
        leaq    .LC1(%rip), %rdx
        movl    $278, %esi
        leaq    .LC2(%rip), %rdi
        call    std::__glibcxx_assert_fail(char const*, int, char const*, char
const*)@PLT

for every function when we use them.

while for the 2nd case 
https://godbolt.org/z/TjP7YxYcT

will only generate once for the assertion part.

Reply via email to