^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /// sizeof when applied to a pointer typed expression gives the size of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) /// the pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) ///
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) // Confidence: High
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) // URL: http://coccinelle.lip6.fr/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) // Comments:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) // Options: --no-includes --include-headers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) virtual org
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) virtual report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) virtual context
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) virtual patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) @depends on patch@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) expression *x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) expression f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) expression i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) type T;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) x = <+... sizeof(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) - x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) + *x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ) ...+>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) f(...,(T)(x),...,sizeof(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) - x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) + *x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) f(...,sizeof(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) - x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) + *x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ),...,(T)(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) f(...,(T)(x),...,i*sizeof(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) - x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) + *x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) f(...,i*sizeof(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) - x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) + *x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ),...,(T)(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) @r depends on !patch@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) expression *x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) expression f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) expression i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) position p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) type T;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) *x = <+... sizeof@p(x) ...+>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) *f(...,(T)(x),...,sizeof@p(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) *f(...,sizeof@p(x),...,(T)(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) *f(...,(T)(x),...,i*sizeof@p(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) *f(...,i*sizeof@p(x),...,(T)(x),...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) @script:python depends on org@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) p << r.p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) cocci.print_main("application of sizeof to pointer",p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) @script:python depends on report@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) p << r.p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) msg = "ERROR: application of sizeof to pointer"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) coccilib.report.print_report(p[0],msg)