root/usr/src/tools/smatch/src/validation/sm_macros.c
#include "check_debug.h"

#define add(x, y) x + y
#define sub(x, y) x - y

int x;
void func(int *p)
{
        int a = 1;
        int b = 2;

        x = 4 * add(2, 3);
        x = 4 + add(2, 3);
        x = 4 * add(2, 3) * 8;
        x = add(2, 3) * 4;
        x = add(2, 3) - 4;
        x = -sub(2, 3);
        x = sub(2, 3)++;
}
/*
 * check-name: Smatch macro precedence bugs
 * check-command: smatch -I.. sm_macros.c
 *
 * check-output-start
sm_macros.c:12 func() warn: the 'add' macro might need parens
sm_macros.c:14 func() warn: the 'add' macro might need parens
sm_macros.c:14 func() warn: the 'add' macro might need parens
sm_macros.c:15 func() warn: the 'add' macro might need parens
sm_macros.c:17 func() warn: the 'sub' macro might need parens
sm_macros.c:18 func() warn: the 'sub' macro might need parens
 * check-output-end
 */