From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8918C7618E for ; Wed, 26 Apr 2023 22:08:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 448C96B012F; Wed, 26 Apr 2023 18:08:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3F8B76B0131; Wed, 26 Apr 2023 18:08:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2C03C6B0133; Wed, 26 Apr 2023 18:08:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1D15F6B012F for ; Wed, 26 Apr 2023 18:08:03 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E18D0A041B for ; Wed, 26 Apr 2023 22:08:02 +0000 (UTC) X-FDA: 80724930804.19.384CF92 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by imf04.hostedemail.com (Postfix) with ESMTP id 21F7340006 for ; Wed, 26 Apr 2023 22:08:00 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=pjQw7QYK; spf=pass (imf04.hostedemail.com: domain of ndesaulniers@google.com designates 209.85.215.174 as permitted sender) smtp.mailfrom=ndesaulniers@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1682546881; h=from:from:sender: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=uRRT1JLj5LjVJGBzDSlmTfM7cyr5YAX9h/3Myc2de1I=; b=i7wNGX/vD00M4JfU5khTI87G2QOZg5xZ72pu4QRKqpAwORLyNHYYgshVwcDjjEkVXL/NVl 7RWLm8u281+AcIfXHP0FiNwW+APe9O3b+COLWHS6mP5lr9s9Z7Rp2+NhhSzBkx9vBFZgIy fnhMFEx+U73GU7hCA5t53QbQDTVhu1I= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=pjQw7QYK; spf=pass (imf04.hostedemail.com: domain of ndesaulniers@google.com designates 209.85.215.174 as permitted sender) smtp.mailfrom=ndesaulniers@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1682546881; a=rsa-sha256; cv=none; b=bSmG2TTZeP/3Yyx6AVRrV9Ecu0Mp+yEjBVoHVyKgCPV76Hj+u4gT6k7eVGi+7Hf8urPi2A eZF6uO9DjlkIXiafP4atMMLciKJMPL3wlzPsOKJqDRJ4RiSeeL6HLYG0jQzdzN8goqICd4 9PXiCoPAveHWffK3qKcB96Syt0l2vmI= Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-51f597c975fso7727339a12.0 for ; Wed, 26 Apr 2023 15:08:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1682546880; x=1685138880; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=uRRT1JLj5LjVJGBzDSlmTfM7cyr5YAX9h/3Myc2de1I=; b=pjQw7QYK9BB2pMV/QaLm+IMj83pHs4ZI2FsGlXF1qxQrOOs/kb37GCGIjRiPtSBplM HZFALGKiEPoDYjKrL/xmsBkYZ/eNEW8XaqWjZzW1iJfOrbZ5BfroedmAxhR5724JPORf DfXj5feRu/YwyI2vy0ucwMVdatNJGgLAskbx8IlgTOm/dscWl1QFOiROwGNVDN7uwjsT yIdPovwGCDW8FveLveGOXVUEC70eIW8bb/OPWGlPRI0iZHYmN+6TpLvrYzpXk1ArKbvJ RS+8H5OAzWFGjgqop/0FgmlgELJL7YhK73jYxsuWP3Lpp8ST7iqL+CJl3kRnvjacr7Vg l45w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682546880; x=1685138880; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uRRT1JLj5LjVJGBzDSlmTfM7cyr5YAX9h/3Myc2de1I=; b=d+tAN+Y9p/2+AMlyqr9Bv/lhclzQqbiVkWk27kMYGmjKFeOrf20B3hnYoYG6rR7co7 FBfIbHCiJcPfEXfBV7U3gZaFkGzCjEVrsihtztTw1XGMIQs+iiVvFhzg7DWIg7isIoBP tLGAUox3V6g4KmFBM7l8fPsRDG+XWIdfNRRCo17OoUuS+YCtMwJjVg7VODy6vFA6Kc1W jS0PUm6L83mNOugen2Z6bzptQrr4bz7fzZxnvWqqTXeGxbwlOzDaV42ty7yUxTUYJExF LOBxXEpZwzoyw44eDGuT0OtEkWvba0LqNkzKbeu2Ak/ru9rs5fsj5GbQFSChht2W9xD7 wJHw== X-Gm-Message-State: AAQBX9e4ukX0R9NB08nFJYOSpQTzxp5IBnUGRvvKqarSIxwi0cSmHcab EEmARRVJvLxYpeuh4J2KGcz+DZQQ8r+99w8KpbKU9g== X-Google-Smtp-Source: AKy350YEQK2YcFvxW+tZ4RwePGpH2SoL6ZVR2Ng7FDiNxIRK+3oqcHDH8LTMcodQMoXj3e++WVPh9YXcvWlgdyMnCHw= X-Received: by 2002:a17:90b:143:b0:246:9a4f:8b2e with SMTP id em3-20020a17090b014300b002469a4f8b2emr21659612pjb.1.1682546879653; Wed, 26 Apr 2023 15:07:59 -0700 (PDT) MIME-Version: 1.0 References: <20230425041838.GA150312@mit.edu> In-Reply-To: From: Nick Desaulniers Date: Wed, 26 Apr 2023 15:07:48 -0700 Message-ID: Subject: Re: [GIT PULL] ext4 changes for the 6.4 merge window To: Linus Torvalds Cc: "Theodore Ts'o" , Nathan Chancellor , linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 21F7340006 X-Stat-Signature: xp6p4f4x8qaok7w6dbikrxybhtr4esio X-HE-Tag: 1682546880-475042 X-HE-Meta: U2FsdGVkX19HOlCD7UZ2Ebk0a5OFJbKi4VJ9MOAwcbOb44EmFH+FmRN+CI4alCB8XION8RDpOOal7/IB58O97K+GblOlHThBTMIJmU7dKx77L9QHE+lR+Hq1KDYt4dczrN7bpyHzAoCB7Z0Hqn4xHSib+qy2mNQqNePGqSAYqVfanKn+QTy2bk4iV7deujF/6xEJjaeyKEjtm++omTL3yBZJcXlaKhScx8up0AoUbK+AN4pKlfR3csWyhOj87htqLpTZMuXpWZG6Fsa6c0UaVuOaTmewGJZI+AsP4vqlI4bxPsafXZI3lnhpEoq8fQw0KXGkPygt5O74MkWTCEmZqjmYAf/153jIr6yymR0y4NQ3mh0AiySvuiLjepswMf0WiIVpsnVRKgLewU3VZ+V7CYh+x31infP8a1Nm/hvGjgp8gZIHfv1DVu4W53k0C6qjZLuIfIKTYP3ew/162J2P8zf6A38Z8y7DvKuLYSZPXXKdFnQeBphP78v+LtlP3IwsbLmNAjY/dCEMGQ44sCSkm1mzRRuQ1lNzB4bdFJ705OhCKDK/POFtDqHNlvwSOPxGfS02SgFnB/Ykzv9Y2vctFLEiDu7CH0DOXtvMsYKF4O7GSoJGtGOT2aQB09oB7jm7gyoRdfsFw51WVpogaeP6EPaJ6eUyn9OFVVF9l6NiFVAF6QnTmyV7RWsUTpHFWIRYeGnJWmc8ro6flOtAg1AGmWtExLDQMo9OUkgXUvoQKF3NZdB6rktAu3P70JAMYNeZojgkbbu8ywb8VX7rZkCehHneE48mE1qcPeyR48lNRRhDcSIkJTNA1aVkS/D3Xu/f9yYExE1LrJ6FiGTbkDitkuXzj7wsLaVjg9EEhTMaRcOF/tGzEyNO6vjaIZj8xZwVTnll9q7wLHvGmuTLn6Qtu/aWSnHckWvek6CEc3odlZKXjLkhGdYrysTk4f3S+WWhEtlWUDX8TWBsQMhpECb b9h12CEO cDKBNWdAyCuqhFmm3dL1w6LO+UcbH5wEY6g787289jf7T0DSe2NSgGrRuIQ//VdSzGlmKuIwEmYLPOgCNoHPr4Qd/sJ/L87oY2D5ddpLUdq4S+rSCG9buVVS+xAIsPRPZkrGMxPjzW8wom4b+yUa86BnJ+06uXklNx1C+abMmaWS+fuRYAQsfCqjFpmCNTCqqxhpgU5tPsm4l/Di43cVQPiTFig== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Apr 26, 2023 at 11:33=E2=80=AFAM Linus Torvalds wrote: > > On Wed, Apr 26, 2023 at 11:22=E2=80=AFAM Nick Desaulniers > wrote: > > > > Ah, it does do something in the callee, not the caller: > > Ack, it does seem to have _some_ meaning for the return case, just not > the one we'd be looking for as a way to find mistakes in the > error-pointer case. Is this what you had in mind? ``` $ cat linus.c #define NULL ((void*)0) void * _Nonnull foo (void) { return &foo; } void bar (void) { if (foo() =3D=3D NULL) // maybe should warn that foo() returns _Nonnull= ? bar(); } $ clang linus.c -fsyntax-only linus.c:8:15: warning: comparison of _Nonnull function call 'foo' equal to a null pointer is always false [-Wtautological-pointer-compare] if (foo() =3D=3D NULL) // maybe should warn that foo() returns _Nonnull= ? ^ linus.c:3:1: note: return type has '_Nonnull' nullability attribute void * _Nonnull foo (void) { ^ 1 warning generated. ``` Quick PoC, obviously incomplete. ``` diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 18a0154b0041..10e405b1cf65 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -3975,8 +3975,9 @@ def note_xor_used_as_pow_silence : Note< "replace expression with '%0' %select{|or use 'xor' instead of '^' }1to silence this warning">; def warn_null_pointer_compare : Warning< - "comparison of %select{address of|function|array}0 '%1' %select{not |}= 2" - "equal to a null pointer is always %select{true|false}2">, + "comparison of %select{address of|function|array|_Nonnull function cal= l}0 " + "'%1' %select{not |}2equal to a null pointer is always " + "%select{true|false}2">, InGroup; def warn_nonnull_expr_compare : Warning< "comparison of nonnull %select{function call|parameter}0 '%1' " @@ -3992,6 +3993,8 @@ def warn_address_of_reference_null_compare : Warning< "code; comparison may be assumed to always evaluate to " "%select{true|false}0">, InGroup; +def note_return_type_nonnull : + Note<"return type has '_Nonnull' nullability attribute">; def note_reference_is_return_value : Note<"%0 returns a reference">; def note_pointer_declared_here : Note< diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.= cpp index f66eb9fcf13d..9f6d326f5b72 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -13176,6 +13176,22 @@ static void AnalyzeImpConvsInComparison(Sema &S, BinaryOperator *E) { /// /// \param E the binary operator to check for warnings static void AnalyzeComparison(Sema &S, BinaryOperator *E) { + if (auto Call =3D dyn_cast(E->getLHS())) { + QualType RetType =3D Call->getCallReturnType(S.Context); + if (std::optional NK =3D RetType->getNullability()) { + if (*NK =3D=3D NullabilityKind::NonNull && + E->getRHS()->isNullPointerConstant(S.Context, + Expr::NPC_ValueDependentIsNotNull)) { + std::string result; + llvm::raw_string_ostream os(result); + Call->getDirectCallee()->getNameForDiagnostic(os, S.getLangOpts(), true); + S.Diag(E->getExprLoc(), diag::warn_null_pointer_compare) << 3 << + result << true; + S.Diag(Call->getDirectCallee()->getReturnTypeSourceRange().getBegi= n(), + diag::note_return_type_nonnull); + } + } + } // The type the comparison is being performed in. QualType T =3D E->getLHS()->getType(); ``` --=20 Thanks, ~Nick Desaulniers