From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by sourceware.org (Postfix) with ESMTPS id 167303858400; Wed, 22 Sep 2021 17:08:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 167303858400 Received: by mail-qt1-x829.google.com with SMTP id r16so3319698qtw.11; Wed, 22 Sep 2021 10:08:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=6o3QTsknRuJdIw9A3Xq88OcSgZfxptoRZLmrj36UcTU=; b=13MCa1y5LU5ei6ojUFPNzDmLWxHzMdS9mzxLFWJ8IW3HmHuL8j7ZO7wAE33WP+0zG5 BZUjTCHrxwCDRdSJS7q26KTF+jD36c/ujRNm8bMSv4JKYvhlox1PZvqvZFHiuWvtBzM1 XWzVwBnDwa0HV3aClij2COao3peuXwzPh1C8SQ5LDkPrdVg2k+4kxM96xpl1Z1D4MqgJ 9l1syJmmVYKG3ICeT5ZC5HZtW8xNh7joUU4a/HkiHADj8NjiQaVDvOdp+V8QSqhrXnr5 bnxSVj6FjqZ6V9LtkZWkLC9SIckh5akjZY32gD0Nz+4zuiPoMR+n9Fy8RC1kfm5yJUT7 6rhg== X-Gm-Message-State: AOAM532qpRaWm9jD6ZD7SM2roYBBrLvb/cFDV1Lz3ZPOYg8+OJiCHc3R MKzryq3dXMlT6/b4JSCQXZDD97OzlBIHMhEPmowEpz0t7TU= X-Google-Smtp-Source: ABdhPJyD4O//RGyuf5M1nvOk6WLGKgBFSdX4wxKePrKfzeciab5QSA11p8//c977X1VOo9z3v2Vm/r6MpCy4/5wODuw= X-Received: by 2002:ac8:6e8f:: with SMTP id c15mr254826qtv.179.1632330494527; Wed, 22 Sep 2021 10:08:14 -0700 (PDT) MIME-Version: 1.0 From: Antony Polukhin Date: Wed, 22 Sep 2021 20:08:03 +0300 Message-ID: Subject: [PATCH] assert that deleting by pointer to base in unique_ptr does not cause UB To: "libstdc++" , gcc-patches List Content-Type: multipart/mixed; boundary="000000000000487cce05cc988f23" X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Sep 2021 17:08:17 -0000 --000000000000487cce05cc988f23 Content-Type: text/plain; charset="UTF-8" std::unique_ptr allows construction from std::unique_ptr of derived type as per [unique.ptr.single.asgn] and [unique.ptr.single.ctor]. If std::default_delete is used with std::unique_ptr, then after such construction a delete is called on a pointer to base. According to [expr.delete] calling a delete on a non similar object without a virtual destructor is an undefined behavior. This patch turns that undefined behavior into static assertions inside std::unique_ptr. Changelog: * include/bits/unique_ptr.h: Add static asserts that deleting by pointer to base in unique_ptr does not cause UB * testsuite/20_util/unique_ptr/assign/slicing_neg.cc: New test. -- Best regards, Antony Polukhin --000000000000487cce05cc988f23 Content-Type: text/plain; charset="US-ASCII"; name="unique_ptr_assert_del.txt" Content-Disposition: attachment; filename="unique_ptr_assert_del.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ktvr8s3l0 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvdW5pcXVlX3B0ci5oIGIvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy91bmlxdWVfcHRyLmgKaW5kZXggNmU1NTM3NS4uNTNhNjhm NSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91bmlxdWVfcHRyLmgKKysr IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91bmlxdWVfcHRyLmgKQEAgLTMzOSw3ICszMzks MTMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJCQkgICAgaXNfY29udmVy dGlibGU8X0VwLCBfRHA+Pjo6dHlwZT4+CiAJdW5pcXVlX3B0cih1bmlxdWVfcHRyPF9VcCwgX0Vw PiYmIF9fdSkgbm9leGNlcHQKIAk6IF9NX3QoX191LnJlbGVhc2UoKSwgc3RkOjpmb3J3YXJkPF9F cD4oX191LmdldF9kZWxldGVyKCkpKQotCXsgfQorCXsKKwkgIHN0YXRpY19hc3NlcnQoIWlzX3Nh bWU8X0RwLCBkZWZhdWx0X2RlbGV0ZTxfVHA+Pjo6dmFsdWUKKwkgICAgfHwgaGFzX3ZpcnR1YWxf ZGVzdHJ1Y3Rvcjx0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlCisJICAgIHx8 IHNpemVvZihfVHApID09IHNpemVvZihfVXApLAorCSAgICAidHlwZSBvZiBwb2ludGVyIG93bmVk IGJ5IF9fdSBtdXN0IGJlIHNpbWlsYXIgdG8gdGhlIHR5cGUgb2YgcG9pbnRlciAiCisJICAgICJv d25lZCBieSB0aGlzIG9iamVjdCBvciB0aGUgbGF0dGVyIG11c3QgaGF2ZSBhIHZpcnR1YWwgZGVz dHJ1Y3RvciIpOworCX0KIAogI2lmIF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECiAjcHJhZ21hIEdD QyBkaWFnbm9zdGljIHB1c2gKQEAgLTM4NSw2ICszOTEsMTIgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KICAgICAgICAgICB1bmlxdWVfcHRyJj46OnR5cGUKIAlvcGVyYXRvcj0o dW5pcXVlX3B0cjxfVXAsIF9FcD4mJiBfX3UpIG5vZXhjZXB0CiAJeworCSAgc3RhdGljX2Fzc2Vy dCghaXNfc2FtZTxfRHAsIGRlZmF1bHRfZGVsZXRlPF9UcD4+Ojp2YWx1ZQorCSAgICB8fCBoYXNf dmlydHVhbF9kZXN0cnVjdG9yPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUK KwkgICAgfHwgc2l6ZW9mKF9UcCkgPT0gc2l6ZW9mKF9VcCksCisJICAgICJ0eXBlIG9mIHBvaW50 ZXIgb3duZWQgYnkgX191IG11c3QgYmUgc2ltaWxhciB0byB0aGUgdHlwZSBvZiBwb2ludGVyICIK KwkgICAgIm93bmVkIGJ5IHRoaXMgb2JqZWN0IG9yIHRoZSBsYXR0ZXIgbXVzdCBoYXZlIGEgdmly dHVhbCBkZXN0cnVjdG9yIik7CisKIAkgIHJlc2V0KF9fdS5yZWxlYXNlKCkpOwogCSAgZ2V0X2Rl bGV0ZXIoKSA9IHN0ZDo6Zm9yd2FyZDxfRXA+KF9fdS5nZXRfZGVsZXRlcigpKTsKIAkgIHJldHVy biAqdGhpczsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBfdXRpbC91bmlx dWVfcHRyL2Fzc2lnbi9zbGljaW5nX25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjBf dXRpbC91bmlxdWVfcHRyL2Fzc2lnbi9zbGljaW5nX25lZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lOTM0ODNhCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS8yMF91dGlsL3VuaXF1ZV9wdHIvYXNzaWduL3NsaWNpbmdfbmVnLmNjCkBAIC0w LDAgKzEsODYgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysxMSB9IH0KKy8vIHsg ZGctcHJ1bmUtb3V0cHV0ICJ2aXJ0dWFsIGRlc3RydWN0b3IiIH0KKworLy8gQ29weXJpZ2h0IChD KSAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUK Ky8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRo aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFy eTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8bWVtb3J5PgorCitzdHJ1Y3QgQSB7IH07Citz dHJ1Y3QgQiA6IEEgeyB9Oworc3RydWN0IEMgOiBCIHsgaW50IGk7IH07CisKK3N0cnVjdCBBYyB7 IGNoYXIgYzsgfTsKK3N0cnVjdCBCYyA6IEFjIHsgfTsKK3N0cnVjdCBDYyA6IEJjIHsgc2hvcnQg czsgfTsKKworCit2b2lkIHRlc3QwMSgpCit7CisgIHN0ZDo6dW5pcXVlX3B0cjxCPiB1cEI7CisK KyAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEE+IGNBOworICBjQSA9IHN0ZDo6bW92ZSh1cEIpOwor CisgIHN0ZDo6dW5pcXVlX3B0cjx2b2xhdGlsZSBBPiB2QTsKKyAgdkEgPSBzdGQ6Om1vdmUodXBC KTsKKworICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3Qgdm9sYXRpbGUgQT4gY3ZBOworICBjdkEgPSBz dGQ6Om1vdmUodXBCKTsKK30KKwordm9pZCB0ZXN0MDIoKQoreworICBzdGQ6OnVuaXF1ZV9wdHI8 Qz4gdXBDOworCisgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBBPiBjQXtzdGQ6Om1vdmUodXBDKX07 ICAvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgY0EgPSBzdGQ6Om1vdmUo dXBDKTsgIC8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorCisgIHN0ZDo6dW5p cXVlX3B0cjx2b2xhdGlsZSBBPiB2QXtzdGQ6Om1vdmUodXBDKX07ICAvLyB7IGRnLWVycm9yICJy ZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgdkEgPSBzdGQ6Om1vdmUodXBDKTsgIC8vIHsgZGctZXJy b3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorCisgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCB2b2xh dGlsZSBBPiBjdkF7c3RkOjptb3ZlKHVwQyl9OyAgLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJv bSBoZXJlIiB9CisgIGN2QSA9IHN0ZDo6bW92ZSh1cEMpOyAgLy8geyBkZy1lcnJvciAicmVxdWly ZWQgZnJvbSBoZXJlIiB9Cit9CisKK3ZvaWQgdGVzdDAzKCkKK3sKKyAgc3RkOjp1bmlxdWVfcHRy PEJjPiB1cEI7CisKKyAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEFjPiBjQTsKKyAgY0EgPSBzdGQ6 Om1vdmUodXBCKTsKKworICBzdGQ6OnVuaXF1ZV9wdHI8dm9sYXRpbGUgQWM+IHZBOworICB2QSA9 IHN0ZDo6bW92ZSh1cEIpOworCisgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCB2b2xhdGlsZSBBYz4g Y3ZBOworICBjdkEgPSBzdGQ6Om1vdmUodXBCKTsKK30KKwordm9pZCB0ZXN0MDQoKQoreworICBz dGQ6OnVuaXF1ZV9wdHI8Q2M+IHVwQzsKKworICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQWM+IGNB e3N0ZDo6bW92ZSh1cEMpfTsgIC8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQor ICBjQSA9IHN0ZDo6bW92ZSh1cEMpOyAgLy8geyBkZy1lcnJvciAicmVxdWlyZWQgZnJvbSBoZXJl IiB9CisKKyAgc3RkOjp1bmlxdWVfcHRyPHZvbGF0aWxlIEFjPiB2QXtzdGQ6Om1vdmUodXBDKX07 ICAvLyB7IGRnLWVycm9yICJyZXF1aXJlZCBmcm9tIGhlcmUiIH0KKyAgdkEgPSBzdGQ6Om1vdmUo dXBDKTsgIC8vIHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorCisgIHN0ZDo6dW5p cXVlX3B0cjxjb25zdCB2b2xhdGlsZSBBYz4gY3ZBe3N0ZDo6bW92ZSh1cEMpfTsgIC8vIHsgZGct ZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorICBjdkEgPSBzdGQ6Om1vdmUodXBDKTsgIC8v IHsgZGctZXJyb3IgInJlcXVpcmVkIGZyb20gaGVyZSIgfQorfQo= --000000000000487cce05cc988f23--