From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 28497 invoked from network); 18 Feb 2023 02:54:12 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 18 Feb 2023 02:54:12 -0000 Received: (qmail 21931 invoked by uid 550); 18 Feb 2023 02:54:08 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 21894 invoked from network); 18 Feb 2023 02:54:07 -0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h7+fgtyC90732sAN6ZVOMLx+uVNMA/uKVvsYfvhl7JhqCe6Im1Aetxk2PLyNKh+UIUqUfi1NERWikY2y1yr5BMad5XBH3D3UFflPRGkAq5MpqmjOd703dDSufe9Dj/jWXrA7qSmccnGwIsZJtNLHckUuiEpbMJZaY4UeQaHO7KtW5djgH2y+wNu4b9OtGWdegtnEPWa4rZ1byjAOGzcHyJxmKq8HQjjgiPkhziLMT74CChQmNfFeLAQbO+mKKuZcs2TCpkQEkZv8ZIRLtmNuMTUy1JK4gPdinEsn4NI7aPPln7+mi6rJcDWtiElrhxVOd/hGTpybrlDcd+Qv7xhoVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/+gwMJteXnG/suTHzbKSikuL6zVYC0AaGjD5cT+oC7c=; b=Ja377Sfx7oJFfoeTnI8kilLb2dhvonenL9a0nzy5y4qL7clemcFXUyL0nnipu6P6bzrURnY6+RjsPX6uuN9fJY7FCOlqclcZ+IWuX4H2a777mfDhJbWj41fV/NaPZQf+I1ZORY4OcD18enpeIEkpme8D6TSbH4IZTpozdqAhwbMLQGqjP2pT/1sQ+92vmbD5xQbr+UAIbTU0mQPZdBO5mKf0pPx8Ss7oAHJkDrPrdn7w6439rxVLaIa0DU/+hHJpqlyLuRxNw1TphHh8XHmsXXE9nKuMzrP6GbXooMlLuuZJacemsea9nWIqRGTn3pI+fqnF6lSKqQfXlkbHCfIL8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none X-Gm-Message-State: AO0yUKVKHoyATIIsJOrWdEngG/4HoPgC/6vza2aCszpnirQse2Kto8U8 wHo9BnI9NaTHCujqPN1YutP6gSefFCAlQN7OZ8U= X-Google-Smtp-Source: AK7set9/YWl8fr2hOgEvJU+wEURNhi7uKww92BC3VIWdQw13QRbh9i116iD3hdMINrCFZ14JnU55FrS1yId0pmOzxSk= X-Received: by 2002:a17:902:ead2:b0:19c:13c5:4f75 with SMTP id p18-20020a170902ead200b0019c13c54f75mr637017pld.35.1676688829595; Fri, 17 Feb 2023 18:53:49 -0800 (PST) References: <20230218013333.844224-1-i@maskray.me> <20230218020320.GA4163@brightrain.aerifal.cx> In-Reply-To: <20230218020320.GA4163@brightrain.aerifal.cx> From: Fangrui Song Date: Fri, 17 Feb 2023 18:53:38 -0800 X-Gmail-Original-Message-ID: Message-ID: To: musl@lists.openwall.com Content-Type: text/plain; charset="UTF-8" X-TMN: [o/XobidlUpInNq8Or91HfiXcI69wd5Sp] X-ClientProxiedBy: MW4PR04CA0316.namprd04.prod.outlook.com (2603:10b6:303:82::21) To MN0PR12MB5761.namprd12.prod.outlook.com (2603:10b6:208:374::6) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN0PR12MB5761:EE_|PH7PR12MB6537:EE_ X-MS-Office365-Filtering-Correlation-Id: b8a9acd6-1f37-4e09-95b8-08db115b5e69 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1tsRCurGtBCgruagB47fupiczUXbvnW1FYdAwkfxII2M9Jl/Vmea8u0i0ZRj8sIV+BpkrXyfo0KmldADMiwu6P55+JTwfmXEF2mqBRlwXKMrL50PzYwCqWT9lfbaQzrjS+HYo5bDf+MqUpAamfeICrDcJ/P2u4S0s63gyOma3S8MjctdUHa46uisFzQdWmqfE01zXlosjQZH1TgrTFhcBzVaufsT8nU4AsXmYOAfBsQgEJVU8Ei+2QV0j6/FcDFya4pTHHPhGXniCAaXxSZ0y+VhEVFgogIBUQ3LW7EHhU2rrEa0NRSwySvHWw4CubsYxBPNKGHJiKqTWl2hrXMoFTo70KNYNVx/OoWN+mWDWeVZFGWifSGBe3ZkO/6iFPjVWRAn4merkd2BwBi/AVcpgE+5WlIuFR9GhfB2FKGyOPi7x2dB9ys/lqzkYFGt+DeEyhogZ6l9Kkero+qchoa3wBpm+UM8EaZK3ylqH2aip3vCjbdkdQrFYbAxpJI5r6h9sP2r8DJHazNQITpeUARrjakxndAHTEK64wayyTfLKt4FvpXl1dSpL0rvl5FbTMppD+230infDH9/NBfB0EETtud3fl/u2RtCgC8I5KYp9mdGE9PN0xuPhTu5XwMiDTAgoSDb+6aozBmgooSkjNGPRw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?clA0bHl2QWYzYVZmUi9FMHVpWUNjSHVnQjJoTkNsc05sTjMwbHlkNXhYSmpO?= =?utf-8?B?ZXhRaEdaSEUwRnUxWExpTmQrMFQ5dTA0YXREUWtJdm94dU9mV0xEeThDRnZQ?= =?utf-8?B?V1BYN0hHVnUwMzVKdzVvaUNBMm12UndxM1dtOTdJb2ZQQUdkQkpsWnpzTlFJ?= =?utf-8?B?cTRablhPSU1xdlpicytWdHFzV3FiY1NteElzV2JDMWFTSE4xSE1JNTI1TmE3?= =?utf-8?B?alhyeGlDcVZIYnhJUkptQnlGcnhyRDh1NnpXbGdkcTNLOVR1NlBDRTNEWUsx?= =?utf-8?B?MCsxNkFVdWVZcW5CcGZ4OFdKM3pJc216QXMxb3luVXp4bGpraVNGY1YxbzZY?= =?utf-8?B?YTAyVFpNYllOcnlUNHlpemxKNWhrTXdkck5rUmw5d3lVSWtFYUdodDNVTkxK?= =?utf-8?B?eVVVdHh2QnJOUWRURytIUDNiM0VGNXhsMElteUdwWnVqNkRQRTgvY2t1c08y?= =?utf-8?B?LzNJN3htTExJM0ZiK0NuaU5ZSjdQdnRWcjllNVlsRDdWek9OMTlFeUdPQjdT?= =?utf-8?B?dVZCQjNHMjBHRTdueVMyUnIwNmRTaWtBOWU3WWdDMUV2QzdPaVEyQ2xMakpW?= =?utf-8?B?eFN2d3k5N2VwOFhqNzdsdXRRUHBjc0lGZCtpMjVoSUNnRDNZcktZRGF0Nm1t?= =?utf-8?B?ek5DbHRzQUZCY3pvLytzaFRsYnB0V0FCNkI0dDFZU2xGTzgzOCt6OUpwR2pi?= =?utf-8?B?Q3h3aTJsblNOZ2dBazZtUVE3TmxIRllRckxyN1BhSzk1aEI5dnNpcDAwNFVn?= =?utf-8?B?T05QZDJJNlpyTVNQRVZKT0FvRlEwaHIva1JFUWd0ekRuakRwMlpEQ1VaUjRU?= =?utf-8?B?b1FLbVU3NE5Ec2FiMTgzcVNyTHljcWdQY0N0UWIvRkY2bnJPOGM3RFdmdU93?= =?utf-8?B?RFhCSXdYcTY5UTdQWHpUSVQzendPV2RKcXNmVzBwbk5oZGtnbkg3bXBRYys4?= =?utf-8?B?MzJwVlpOS1V5c29Hck80V2Q2bUptRnkraHNzbUdHNmZldjFWVVFvd1pCVXJJ?= =?utf-8?B?OTJQakVQYWpndm95cEk3UmcvSXpZYTBYYWtTNi90RFYwVStpbGhnb2tnYVNG?= =?utf-8?B?SzdsYldvSnBwbzRRWlpwNWpVVHNXczkxUmN4T1ZxNFVVSTNZVzBFbUFHeUVQ?= =?utf-8?B?K1VqcC93dnl5OU1RN1hLbUh0QTJwSUU1dmtYaFdPaHRiRG8vK0RHMGlqSmRq?= =?utf-8?B?SVVlbCsxL21GemNhRlZQdXFPOGFla3Z6Wkc3WGVoT242RmltRFBlSjZKL2lW?= =?utf-8?B?dEx1WldXQ29Vb2VweHZXTm84QVMxdkpJSXBvejVWR0ZzTEpvTy9vdldEdFFl?= =?utf-8?B?cjlMd0Y5UnNsVitONE1QSDJNMXRXclgrYlVxUUpiWGFFMkpRVjVEMXRvQWRt?= =?utf-8?B?cDRlSkROc1czZTREMklZbkNkdy9CRVkvQmNvc1pXcFBCcXF3TU1TZ1ZyM1Za?= =?utf-8?B?SXVhbEw2TGJhZzZRdTdvQUhhQUN2VkNPYkVKeU1YNlZiOWp3bnBDNSs5QVBH?= =?utf-8?B?L1BDVTlyYU8rU09kUXU0Z3krYlhTUnlBTDE4SURzZWNEV2pGUHo1WUZYRGFH?= =?utf-8?B?b0ZmNDdodUxEdzEySUM5Yk0raThOR0RmNXZ4UVhFSzBxZ3d2ZC94ZHMwNkdV?= =?utf-8?B?VDNTck9kdSs3UmJMQ0E4U21zUGZNbzZrckhjd1dCYUtXK2NkYUlpMFR4eXhO?= =?utf-8?Q?1Mi4cTdNhSMIDMEV7C+o?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-71ea3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: b8a9acd6-1f37-4e09-95b8-08db115b5e69 X-MS-Exchange-CrossTenant-AuthSource: MN0PR12MB5761.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2023 02:53:54.3785 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6537 Subject: Re: [musl] [PATCH] Use __builtin_FILE/__builtin_LINE if available On Fri, Feb 17, 2023 at 6:03 PM Rich Felker wrote: > > On Fri, Feb 17, 2023 at 05:33:33PM -0800, Fangrui Song wrote: > > C++ inline functions are requred to have exact same sequence of tokens > > in every translation unit, but __FILE__ and __LINE__ may expand to > > different tokens. The ODR violatioin is usually benign, but it can lead > > to errors when C++20 modules are used. > > > > echo 'import B; import C; int main() { foo(); }' > A.cc > > cat > B.ccm <<'eof' > > module; > > #include > > export module B; export inline void foo() { assert(1); } > > eof > > cat > C.ccm <<'eof' > > module; > > #include > > export module C; export inline void foo() { assert(1); } > > eof > > clang -std=c++20 --precompile B.ccm -o B.pcm > > clang -std=c++20 --precompile C.ccm -o C.pcm > > clang -std=c++20 -fprebuilt-module-path=. A.cc B.pcm C.pcm -o A > > > > /tmp/d/C.ccm:3:37: error: 'foo' has different definitions in different modules; definition in module 'C' first difference is function body > > export module C; export inline void foo() { assert(1); } > > ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ > > /tmp/d/B.ccm:3:37: note: but in 'B' found a different body > > export module B; export inline void foo() { assert(1); } > > ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ > > > > Fix this by preferring __builtin_FILE/__builtin_LINE which do not need > > preprocessing. > > --- > > include/assert.h | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/include/assert.h b/include/assert.h > > index d14ec94e..b209c2ae 100644 > > --- a/include/assert.h > > +++ b/include/assert.h > > @@ -4,6 +4,12 @@ > > > > #ifdef NDEBUG > > #define assert(x) (void)0 > > +#elif defined(__has_builtin) > > +#if __has_builtin(__builtin_FILE) > > +#define assert(x) ((void)((x) || (__assert_fail(#x, __builtin_FILE(), __builtin_LINE(), __func__),0))) > > +#else > > +#define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0))) > > +#endif > > #else > > #define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0))) > > #endif > > -- > > 2.39.GIT > > It seems like use of assert here violates the ODR and is thus an > application error, no? In particular, it produces multiple definitions > that have differing behaviors, leaving which one actually gets used up > to the linker. Without the above change, LTO is able to diagnose the > error; with the change; it's silently deferred until runtime (where > the assertion violation message, of produced, will likely indicate the > wrong location). > > Rich I am unsure whether it is an application error in the above example. If it is not a good example, here is another one where the inline function using assert is in a header: echo 'import B; import C; int main() { foo(); }' > A.cc cat > a.h <<'eof' #include inline void fn() { assert(1); } eof cat > B.ccm <<'eof' module; #include "a.h" export module B; export inline void foo() { fn(); } eof mkdir -p ./d cat > d/C.ccm <<'eof' module; #include "../a.h" export module C; export inline void foo() { fn(); } eof sed 's/^ /\t/' > Makefile <<'eof' C := clang all: $C -std=c++20 --precompile B.ccm -o B.pcm $C -std=c++20 --precompile d/C.ccm -o d/C.pcm $C -std=c++20 -fprebuilt-module-path=. -fprebuilt-module-path=d A.cc B.pcm d/C.pcm -o A eof