From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4330 invoked by alias); 7 Nov 2011 21:44:11 -0000 Received: (qmail 4319 invoked by uid 22791); 7 Nov 2011 21:44:09 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_NV X-Spam-Check-By: sourceware.org Received: from mail-ww0-f41.google.com (HELO mail-ww0-f41.google.com) (74.125.82.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 07 Nov 2011 21:43:52 +0000 Received: by wwf27 with SMTP id 27so5392507wwf.2 for ; Mon, 07 Nov 2011 13:43:50 -0800 (PST) MIME-Version: 1.0 Received: by 10.227.203.200 with SMTP id fj8mr33317338wbb.14.1320702230742; Mon, 07 Nov 2011 13:43:50 -0800 (PST) Received: by 10.216.63.83 with HTTP; Mon, 7 Nov 2011 13:43:50 -0800 (PST) Date: Mon, 07 Nov 2011 21:47:00 -0000 Message-ID: Subject: [patch] c++/2972 warn when ctor-initializer leaves uninitialized data From: Jonathan Wakely To: gcc-patches Cc: Jason Merrill Content-Type: multipart/mixed; boundary=00151758b1cc51466004b12bf346 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-11/txt/msg01071.txt.bz2 --00151758b1cc51466004b12bf346 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1097 This is a new version of my -Wmeminit patch, first posted to PR c++/2972. Jason suggested combining the Wmeminit warning with the adjacent Weffc++ one which I agree with. The advice in the Effective C++ book actually says not to leave members uninitialized, rather than saying *all* members must have a mem-initializer (which is just annoying in many cases if the type has a safe default constructor), and my patch provides a better check for that by only warning when data is left uninitialized. Unfortunately this doesn't work very well in C++11 mode, as defaulted constructors don't cause warnings when they should do e.g. struct C { int i; C() = default; }; This doesn't produce the same warning as C() {} even though that's what the defaulted constructor is equivalent to. I'm posting it for comment and in case anyone else has time to work on it. * c-family/c.opt (Wmeminit): Add new option. * c-family/c-opts.c: Include it in Wecpp * cp/init.c: Implement Wmeminit. * doc/invoke.texi: document it. * testsuite/g++.dg/warn/Wmeminit.C: New. --00151758b1cc51466004b12bf346 Content-Type: text/x-patch; charset=US-ASCII; name="2972.patch" Content-Disposition: attachment; filename="2972.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gupz8qr70 Content-length: 6247 SW5kZXg6IGMtZmFtaWx5L2Mub3B0Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGMtZmFtaWx5L2Mub3B0CShyZXZpc2lvbiAxODEwOTYpCisrKyBjLWZh bWlseS9jLm9wdAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2MSwxMCBA QAogQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fbWFpbikgSW5pdCgtMSkg V2FybmluZwogV2FybiBhYm91dCBzdXNwaWNpb3VzIGRlY2xhcmF0aW9ucyBv ZiBcIm1haW5cIgogCitXbWVtaW5pdAorQysrIFZhcih3YXJuX21lbWluaXQp IFdhcm5pbmcKK1dhcm4gYWJvdXQgbWlzc2luZyBtZW1iZXIgaW5pdGlhbGl6 ZXJzIGluIGNvbnN0cnVjdG9ycyB3aGljaCBsZWF2ZSBkYXRhIHVuaW5pdGlh bGl6ZWQKKwogV21pc3NpbmctYnJhY2VzCiBDIE9iakMgQysrIE9iakMrKyBW YXIod2Fybl9taXNzaW5nX2JyYWNlcykgV2FybmluZwogV2FybiBhYm91dCBw b3NzaWJseSBtaXNzaW5nIGJyYWNlcyBhcm91bmQgaW5pdGlhbGl6ZXJzCklu ZGV4OiBjLWZhbWlseS9jLW9wdHMuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBjLWZhbWlseS9jLW9wdHMuYwkocmV2aXNpb24gMTgxMDk2KQorKysg Yy1mYW1pbHkvYy1vcHRzLmMJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw3ICs1 NTAsMTQgQEAKICAgICBjYXNlIE9QVF9XZWZmY19fOgogICAgICAgd2Fybl9l Y3BwID0gdmFsdWU7CiAgICAgICBpZiAodmFsdWUpCi0gICAgICAgIHdhcm5f bm9udmR0b3IgPSB0cnVlOworICAgICAgICB7CisgICAgICAgICAgLyogRWZm ZWN0aXZlIEMrKyBydWxlIDEyIHNheXMgdG8gcHJlZmVyIHVzaW5nIGEgbWVt LWluaXRpYWxpemVyCisgICAgICAgICAgICAgdG8gYXNzaWdubWVudC4gKi8K KyAgICAgICAgICB3YXJuX21lbWluaXQgPSB0cnVlOworICAgICAgICAgIC8q IEVmZmVjdGl2ZSBDKysgcnVsZSAxNCBzYXlzIHRvIGRlY2xhcmUgZGVzdHJ1 Y3RvcnMgdmlydHVhbAorICAgICAgICAgICAgIGluIHBvbHltb3JwaGljIGNs YXNzZXMuICovCisgICAgICAgICAgd2Fybl9ub252ZHRvciA9IHRydWU7Cisg ICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBPUFRfYW5zaToK SW5kZXg6IGNwL2luaXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj cC9pbml0LmMJKHJldmlzaW9uIDE4MTA5NikKKysrIGNwL2luaXQuYwkod29y a2luZyBjb3B5KQpAQCAtNTE4LDEzICs1MTgsMjcgQEAKIAl9CiAgICAgfQog Ci0gIC8qIEVmZmVjdGl2ZSBDKysgcnVsZSAxMiByZXF1aXJlcyB0aGF0IGFs bCBkYXRhIG1lbWJlcnMgYmUKLSAgICAgaW5pdGlhbGl6ZWQuICAqLwotICBp ZiAod2Fybl9lY3BwICYmIGluaXQgPT0gTlVMTF9UUkVFICYmIFRSRUVfQ09E RSAodHlwZSkgIT0gQVJSQVlfVFlQRSkKLSAgICB3YXJuaW5nX2F0IChERUNM X1NPVVJDRV9MT0NBVElPTiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSwgT1BU X1dlZmZjX18sCi0JCSIlcUQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGluIHRo ZSBtZW1iZXIgaW5pdGlhbGl6YXRpb24gbGlzdCIsCi0JCW1lbWJlcik7Cisg IC8qIFdhcm4gaWYgdGhlcmUgaXMgbm8gaW5pdGlhbGl6ZXIgZm9yIGEgbWVt YmVyIHdoaWNoIHdpbGwgbGVhdmUgZGF0YQorICAgICB1bmluaXRpYWxpemVk LiAqLwogCisgIGlmICh3YXJuX21lbWluaXQgJiYgaW5pdCA9PSBOVUxMX1RS RUUpCisgICAgeworICAgICAgdHJlZSBmaWVsZCA9IGRlZmF1bHRfaW5pdF91 bmluaXRpYWxpemVkX3BhcnQgKHR5cGUpOworICAgICAgaWYgKGZpZWxkKQor ICAgICAgICB7CisgICAgICAgICAgaWYgKERFQ0xfUCAoZmllbGQpKQorICAg ICAgICAgICAgd2FybmluZ19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGN1 cnJlbnRfZnVuY3Rpb25fZGVjbCksCisgICAgICAgICAgICAgICAgICAgICAg ICBPUFRfV21lbWluaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXFE IGlzIG5vdCBpbml0aWFsaXplZCBpbiB0aGUgbWVtYmVyIGluaXRpYWxpemF0 aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBsaXN0LCBzbyAlcSsj RCBpcyB1bmluaXRpYWxpemVkIiwgbWVtYmVyLCBmaWVsZCk7CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgd2FybmluZ19hdCAoREVDTF9TT1VSQ0Vf TE9DQVRJT04gKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCksCisgICAgICAgICAg ICAgICAgICAgICAgICBPUFRfV21lbWluaXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAiJXFEIGlzIG5vdCBpbml0aWFsaXplZCBpbiB0aGUgbWVtYmVy IGluaXRpYWxpemF0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBs aXN0IiwgbWVtYmVyKTsKKyAgICAgICAgfQorICAgIH0KKwogICAvKiBHZXQg YW4gbHZhbHVlIGZvciB0aGUgZGF0YSBtZW1iZXIuICAqLwogICBkZWNsID0g YnVpbGRfY2xhc3NfbWVtYmVyX2FjY2Vzc19leHByIChjdXJyZW50X2NsYXNz X3JlZiwgbWVtYmVyLAogCQkJCQkgLyphY2Nlc3NfcGF0aD0qL05VTExfVFJF RSwKSW5kZXg6IHRlc3RzdWl0ZS9nKysuZGcvd2Fybi9XbWVtaW5pdC5DCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS9nKysuZGcvd2Fy bi9XbWVtaW5pdC5DCShyZXZpc2lvbiAwKQorKysgdGVzdHN1aXRlL2crKy5k Zy93YXJuL1dtZW1pbml0LkMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIg QEAKKy8vIFBSIGMrKy8yOTcyCisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8g eyBkZy1vcHRpb25zICItV21lbWluaXQiIH0KKworLy8gV2FybiB3aGVuIGEg Y29uc3RydWN0b3IgKHVzZXItZGVjbGFyZWQgb3IgaW1wbGljaXRseS1kZWNs YXJlZCkKKy8vIGxlYXZlcyBtZW1iZXJzIHVuaW5pdGlhbGl6ZWQuCisKK3N0 cnVjdCBBIAoreworICBpbnQgaTsKKyAgQSgpIDogaSgpIHsgfSAvLyB7IGRn LWJvZ3VzICJ1bmluaXRpYWxpemVkIiB9Cit9OworCitzdHJ1Y3QgQiAKK3sK KyAgaW50IGk7CisgIEIoKSB7IH0gLy8geyBkZy13YXJuaW5nICInQjo6aScg aXMgbm90IGluaXRpYWxpemVkIiB9Cit9OworCitzdHJ1Y3QgQyAvLyB7IGRn LWJvZ3VzICJ1bmluaXRpYWxpemVkIiB9Cit7CisgIGludCBpOworfTsgCisK K3N0cnVjdCBECit7CisgIEMgYzsKKyAgRCgpIDogYygpIHsgfSAvLyB7IGRn LWJvZ3VzICJ1bmluaXRpYWxpemVkIiB9Cit9OworCitzdHJ1Y3QgRQorewor ICBpbnQgaTsgLy8geyBkZy13YXJuaW5nICInRjo6ZScgaXMgbm90IGluaXRp YWxpemVkIiB9Cit9OyAKKworc3RydWN0IEYKK3sKKyAgRSBlOworICBGKCkg eyB9Cit9OworCitzdHJ1Y3QgRworeworICBpbnQgaTsgLy8geyBkZy13YXJu aW5nICInSDo6ZycgaXMgbm90IGluaXRpYWxpemVkIiB9Cit9OyAKKworc3Ry dWN0IEgKK3sKKyAgRyBnOworICBIKGNvbnN0IEgmKSB7IH0KK307CisKK3N0 cnVjdCBJIC8vIHsgZGctd2FybmluZyAiJ0k6OmknIGlzIG5vdCBpbml0aWFs aXplZCIgfQoreworICBpbnQgaTsKK307CisKK3N0cnVjdCBKIDogSQorewor ICBKKCkgeyB9Cit9OworCitzdHJ1Y3QgSyAvLyB7IGRnLXdhcm5pbmcgIidL OjppJyBpcyBub3QgaW5pdGlhbGl6ZWQiIH0KK3sKKyAgaW50IGk7Cit9Owor CitzdHJ1Y3QgTCA6IEsKK3sKKyAgTChjb25zdCBMJikgeyB9Cit9OworCklu ZGV4OiBkb2MvaW52b2tlLnRleGkKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZG9jL2ludm9rZS50ZXhpCShyZXZpc2lvbiAxODEwOTYpCisrKyBkb2Mv aW52b2tlLnRleGkJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEsNiArMjM3MSwy MiBAQAogYmFzZSBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgdmlydHVhbCBkZXN0 cnVjdG9yLiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQKIGJ5IEBvcHRpb257 LVdhbGx9LgogCitAaXRlbSAtV21lbWluaXQgQHJ7KEMrKyBhbmQgT2JqZWN0 aXZlLUMrKyBvbmx5KX0KK0BvcGluZGV4IFdtZW1pbml0CitAb3BpbmRleCBX bm8tbWVtaW5pdAorV2FybiBhYm91dCBtaXNzaW5nIG1lbWJlciBpbml0aWFs aXplcnMgaW4gY29uc3RydWN0b3JzIHdoaWNoIGxlYXZlIGRhdGEKK3VuaW5p dGlhbGl6ZWQuIEEgd2FybmluZyB3aWxsIHN0aWxsIGJlIGdpdmVuIGV2ZW4g aWYgdGhlIG1lbWJlciBpcworaW5pdGlhbGl6ZWQgaW4gdGhlIGNvbnN0cnVj dG9yIGJvZHkgZS5nLgorCitAc21hbGxleGFtcGxlCitzdHJ1Y3QgQSBAewor ICBpbnQgaTsKKyAgQSgpIEB7IGkgPSAwOyBAfSAvLyB3YXJuaW5nOiAnQTo6 aScgaXMgbm90IGluaXRpYWxpemVkCitAfTsKK0BlbmQgc21hbGxleGFtcGxl CisKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGlmIC1XZWZmYysrIGlzIHNw ZWNpZmllZC4KKwogQGl0ZW0gLVduYXJyb3dpbmcgQHJ7KEMrKyBhbmQgT2Jq ZWN0aXZlLUMrKyBvbmx5KX0KIEBvcGluZGV4IFduYXJyb3dpbmcKIEBvcGlu ZGV4IFduby1uYXJyb3dpbmcK --00151758b1cc51466004b12bf346--