]> gcc.gnu.org Git - gcc.git/commit
Add warning options -W[no-]compare-distinct-pointer-types
authorJose E. Marchesi <jose.marchesi@oracle.com>
Thu, 17 Aug 2023 13:36:26 +0000 (15:36 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Thu, 17 Aug 2023 15:35:57 +0000 (17:35 +0200)
commite1f45bea2741c271efbc4c2f9dfad93cbcd644c0
tree7a55999c59eda082fbb9bce6b1c0ebf82d104551
parentee40bdbfb07c604a126069f05c1358c3d76f7812
Add warning options -W[no-]compare-distinct-pointer-types

GCC emits pedwarns unconditionally when comparing pointers of
different types, for example:

  int xdp_context (struct xdp_md *xdp)
    {
        void *data = (void *)(long)xdp->data;
        __u32 *metadata = (void *)(long)xdp->data_meta;
        __u32 ret;

        if (metadata + 1 > data)
          return 0;
        return 1;
   }

  /home/jemarch/foo.c: In function ‘xdp_context’:
  /home/jemarch/foo.c:15:20: warning: comparison of distinct pointer types lacks a cast
         15 |   if (metadata + 1 > data)
                 |                    ^

LLVM supports an option -W[no-]compare-distinct-pointer-types that can
be used in order to enable or disable the emission of such warnings.
It is enabled by default.

This patch adds the same options to GCC.

Documentation and testsuite updated included.
Regtested in x86_64-linu-gnu.
No regressions observed.

gcc/ChangeLog:

PR c/106537
* doc/invoke.texi (Option Summary): Mention
-Wcompare-distinct-pointer-types under `Warning Options'.
(Warning Options): Document -Wcompare-distinct-pointer-types.

gcc/c-family/ChangeLog:

PR c/106537
* c.opt (Wcompare-distinct-pointer-types): New option.

gcc/c/ChangeLog:

PR c/106537
* c-typeck.cc (build_binary_op): Warning on comparing distinct
pointer types only when -Wcompare-distinct-pointer-types.

gcc/testsuite/ChangeLog:

PR c/106537
* gcc.c-torture/compile/pr106537-1.c: New test.
* gcc.c-torture/compile/pr106537-2.c: Likewise.
* gcc.c-torture/compile/pr106537-3.c: Likewise.
gcc/c-family/c.opt
gcc/c/c-typeck.cc
gcc/doc/invoke.texi
gcc/testsuite/gcc.c-torture/compile/pr106537-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr106537-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr106537-3.c [new file with mode: 0644]
This page took 0.061642 seconds and 5 git commands to generate.