From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 7151A389942F for ; Wed, 16 Nov 2022 02:46:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7151A389942F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668566784; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PGxk0ozAGOFe9JWxb1XcR4O0s4ogU/CfNuINspHazXM=; b=eo7aKQotRzNvuoAeGMLBCPofrlYW/qQX6uWW7YCgdv6U34JE7PSm0EWfVG26bA55Y8dAIO n3CQhKevxZthWlVZBhjycA9GPV7LVWLCVIuPnHqtx/s9+m3zsecAVS4efLcUowwbaiKK4w wESESCs4wGx8UYC3VBZs547QCdBY0qc= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-636-Mu6VXMi_NUm43w3aUIkrKQ-1; Tue, 15 Nov 2022 21:46:22 -0500 X-MC-Unique: Mu6VXMi_NUm43w3aUIkrKQ-1 Received: by mail-qk1-f198.google.com with SMTP id de43-20020a05620a372b00b006fae7e5117fso15704220qkb.6 for ; Tue, 15 Nov 2022 18:46:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PGxk0ozAGOFe9JWxb1XcR4O0s4ogU/CfNuINspHazXM=; b=jykJkG+5yUHwol62ztd+dtJXijpfDBeApOaEn0d5DsqTz8SlxKNCSYAz8D5Qx0NyOj bQ7z/NIdvpCXdof9OPm4K2FnDGvqhgv1HkC/k7DR/Rxinr7X7500jCLBl+h+5w1iJt0r xjsnA8Lj2cEdrFxcPSyiC/b5lquw9LFNiMR7tMt8BlTxVC4rjypMtQoeLlLIWCZ8tREX E96pYpZ3TJFR4ruPnTNw5r/HqQogxvFmU7y8EK8gjAnBorrwCOcNRTFj8NwFa/nMpmqD SQv9Hi7fSddQiJNVzm2LPkcmJ6dS4+4nmUjui96WS4G+27ncV8SYh9XuLd+9orNaw1yC PKdg== X-Gm-Message-State: ANoB5pm8ZRgzeO2LkXiCgd6XFV00AysuxCLaWlc6HYUwDWCIaEPg8usL 5nLp3t6I8tB6WAYBlJOgT67M2q86ntoZoZQDvKYtX7OtLbl7cpWHetQUtRWNmLRgklN59wFCoT6 VFNK0lwLKf9YuA/4= X-Received: by 2002:a05:620a:199d:b0:6fa:e099:bc12 with SMTP id bm29-20020a05620a199d00b006fae099bc12mr18228134qkb.308.1668566782228; Tue, 15 Nov 2022 18:46:22 -0800 (PST) X-Google-Smtp-Source: AA0mqf4UVahcSOFvrAXuwWxrfj3EjhyDw6bmH19imtoJJJiO1/JmqpreXoJf2vd2f9op0BuRtO/G7g== X-Received: by 2002:a05:620a:199d:b0:6fa:e099:bc12 with SMTP id bm29-20020a05620a199d00b006fae099bc12mr18228121qkb.308.1668566781987; Tue, 15 Nov 2022 18:46:21 -0800 (PST) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id v14-20020ac873ce000000b003a5689134afsm8091561qtp.36.2022.11.15.18.46.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Nov 2022 18:46:21 -0800 (PST) From: Patrick Palka To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Patrick Palka Subject: [PATCH] libstdc++: Fix stream initialization with static library [PR107701] Date: Tue, 15 Nov 2022 21:46:19 -0500 Message-Id: <20221116024619.1465996-1-ppalka@redhat.com> X-Mailer: git-send-email 2.38.1.436.geea7033409 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-13.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When linking with a static library, the linker seems to exclude a constituent .o object (including its global initializers) if nothing from it is referenced by the program (unless e.g. --whole-archive is used). This behavior breaks iostream when linking with static libstdc++.a (on systems that support init priorities) because we're defining the global initializer for the standard stream objects in a separate TU (ios_init.cc) from the stream objects definitions (globals_io.cc). Thus in order to ensure that the global initializer for the standard stream objects doesn't get wrongly dropped when statically linking, we need to perform the initialization from the same TU that actually defines the stream objects. Tested on x86_64-pc-linux-gnu, does this look OK for trunk? PR libstdc++/107701 libstdc++-v3/ChangeLog: * src/c++98/globals_io.cc: Include "io_base_init.h" here instead of ... * src/c++98/ios_init.cc: ... here. * testsuite/17_intro/static.cc: Run the test as well. --- libstdc++-v3/src/c++98/globals_io.cc | 2 ++ libstdc++-v3/src/c++98/ios_init.cc | 2 -- libstdc++-v3/testsuite/17_intro/static.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/src/c++98/globals_io.cc b/libstdc++-v3/src/c++98/globals_io.cc index 04fecb22aeb..bfd808b5bbd 100644 --- a/libstdc++-v3/src/c++98/globals_io.cc +++ b/libstdc++-v3/src/c++98/globals_io.cc @@ -69,6 +69,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION fake_wostream wclog; #endif +#include "ios_base_init.h" + _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/src/c++98/ios_init.cc b/libstdc++-v3/src/c++98/ios_init.cc index 4016fcab785..1b5132f1c2d 100644 --- a/libstdc++-v3/src/c++98/ios_init.cc +++ b/libstdc++-v3/src/c++98/ios_init.cc @@ -75,8 +75,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION extern wostream wclog; #endif -#include "ios_base_init.h" - ios_base::Init::Init() { if (__gnu_cxx::__exchange_and_add_dispatch(&_S_refcount, 1) == 0) diff --git a/libstdc++-v3/testsuite/17_intro/static.cc b/libstdc++-v3/testsuite/17_intro/static.cc index ffa7ecb7077..a0d6ed081f8 100644 --- a/libstdc++-v3/testsuite/17_intro/static.cc +++ b/libstdc++-v3/testsuite/17_intro/static.cc @@ -1,4 +1,4 @@ -// { dg-do link { target c++11 } } +// { dg-do run { target c++11 } } // { dg-require-static-libstdcxx } // { dg-options "-static-libstdc++" } -- 2.38.1.436.geea7033409