1*05808a22Srillig /* $NetBSD: oper.c,v 1.16 2024/03/31 20:28:45 rillig Exp $ */ 286686911Srillig 386686911Srillig /*- 486686911Srillig * Copyright (c) 2021 The NetBSD Foundation, Inc. 586686911Srillig * All rights reserved. 686686911Srillig * 786686911Srillig * This code is derived from software contributed to The NetBSD Foundation 886686911Srillig * by Roland Illig. 986686911Srillig * 1086686911Srillig * Redistribution and use in source and binary forms, with or without 1186686911Srillig * modification, are permitted provided that the following conditions 1286686911Srillig * are met: 1386686911Srillig * 1. Redistributions of source code must retain the above copyright 1486686911Srillig * notice, this list of conditions and the following disclaimer. 1586686911Srillig * 2. Redistributions in binary form must reproduce the above copyright 1686686911Srillig * notice, this list of conditions and the following disclaimer in the 1786686911Srillig * documentation and/or other materials provided with the distribution. 1886686911Srillig * 1986686911Srillig * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2086686911Srillig * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2186686911Srillig * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2286686911Srillig * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2386686911Srillig * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2486686911Srillig * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2586686911Srillig * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2686686911Srillig * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2786686911Srillig * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2886686911Srillig * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2986686911Srillig * POSSIBILITY OF SUCH DAMAGE. 3086686911Srillig */ 3186686911Srillig 3286686911Srillig #include "op.h" 3386686911Srillig #include "param.h" 3486686911Srillig 354451bd67Srillig #define X true 364451bd67Srillig #define _ false 374451bd67Srillig 384451bd67Srillig const mod_t modtab[NOPS] = { 394451bd67Srillig 404451bd67Srillig /*- 414451bd67Srillig * Operator properties: 424451bd67Srillig * 434451bd67Srillig * b binary 444451bd67Srillig * l logical 454451bd67Srillig * b takes _Bool 464451bd67Srillig * z compares with zero 474451bd67Srillig * i requires integer 484451bd67Srillig * c requires integer or complex 494451bd67Srillig * a requires arithmetic 504451bd67Srillig * s requires scalar 514451bd67Srillig * f fold constant operands 524451bd67Srillig * v value context 534451bd67Srillig * b balance operands 544451bd67Srillig * s has side effects 554451bd67Srillig * l warn if left operand unsigned 564451bd67Srillig * r warn if right operand unsigned 574451bd67Srillig * p possible precedence confusion 584451bd67Srillig * c comparison 594451bd67Srillig * e valid on enum 604451bd67Srillig * e bad on enum 614451bd67Srillig * = warn if operand '=' 624451bd67Srillig * o has operands 634451bd67Srillig */ 644451bd67Srillig 654451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 664451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "no-op" }, 674451bd67Srillig {X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "->" }, 684451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "." }, 694451bd67Srillig {_,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "!" }, 704451bd67Srillig {_,_,_,_,_,X,_,_,X,X,_,_,_,_,_,_,_,X,X,X, "~" }, 714451bd67Srillig /* 724451bd67Srillig * The '++' and '--' operators are conceptually unary operators, but 734451bd67Srillig * lint implements them as binary operators due to the pre-multiplied 744451bd67Srillig * pointer arithmetics, see build_prepost_incdec and build_plus_minus. 754451bd67Srillig */ 764451bd67Srillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "++x" }, 774451bd67Srillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "--x" }, 784451bd67Srillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x++" }, 794451bd67Srillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x--" }, 804451bd67Srillig {_,_,_,_,_,_,X,_,X,X,_,_,_,_,_,_,_,X,X,X, "+" }, 814451bd67Srillig {_,_,_,_,_,_,X,_,X,X,_,_,X,_,_,_,_,X,X,X, "-" }, 824451bd67Srillig {_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "*" }, 834451bd67Srillig {_,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "&" }, 844451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 854451bd67Srillig {X,_,_,_,_,_,X,_,X,X,X,_,_,X,_,_,_,X,X,X, "*" }, 864451bd67Srillig {X,_,_,_,_,_,X,_,X,X,X,_,X,X,_,_,_,X,X,X, "/" }, 874451bd67Srillig {X,_,_,_,X,_,_,_,X,X,X,_,X,X,_,_,_,X,X,X, "%" }, 884451bd67Srillig {X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "+" }, 894451bd67Srillig {X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "-" }, 904451bd67Srillig {X,_,_,_,X,_,_,_,X,X,_,_,_,_,X,_,_,X,X,X, "<<" }, 914451bd67Srillig {X,_,_,_,X,_,_,_,X,X,_,_,X,_,X,_,_,X,X,X, ">>" }, 924451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 934451bd67Srillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<" }, 944451bd67Srillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<=" }, 954451bd67Srillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">" }, 964451bd67Srillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">=" }, 974451bd67Srillig {X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "==" }, 984451bd67Srillig {X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "!=" }, 994451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 1004451bd67Srillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "&" }, 1014451bd67Srillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "^" }, 1024451bd67Srillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "|" }, 1034451bd67Srillig {X,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "&&" }, 1044451bd67Srillig {X,X,X,X,_,_,_,X,X,_,_,_,_,_,X,_,_,X,_,X, "||" }, 1054451bd67Srillig {X,_,_,X,_,_,_,_,X,_,_,_,_,_,_,_,_,_,_,X, "?" }, 1064451bd67Srillig {X,_,X,_,_,_,_,_,_,X,X,_,_,_,_,_,X,_,_,X, ":" }, 1074451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 1084451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "=" }, 1094451bd67Srillig {X,_,_,_,_,_,X,_,_,_,_,X,_,_,_,_,_,X,_,X, "*=" }, 1104451bd67Srillig {X,_,_,_,_,_,X,_,_,_,_,X,_,X,_,_,_,X,_,X, "/=" }, 1114451bd67Srillig {X,_,_,_,X,_,_,_,_,_,_,X,_,X,_,_,_,X,_,X, "%=" }, 1124451bd67Srillig {X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "+=" }, 1134451bd67Srillig {X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "-=" }, 1144451bd67Srillig {X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "<<=" }, 1154451bd67Srillig {X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, ">>=" }, 1164451bd67Srillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "&=" }, 1174451bd67Srillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "^=" }, 1184451bd67Srillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "|=" }, 1194451bd67Srillig /* b l b z i c a s f v b s l r p c e e = o */ 1204451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "name" }, 1214451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "constant" }, 1224451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "string" }, 1234451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "fsel" }, 1245c34ad8fSrillig {_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "call" }, 1254451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X,X, "," }, 1264451bd67Srillig {_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "convert" }, 1274451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "load" }, 1284451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "return" }, 1294451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "real" }, 1304451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "imag" }, 1314451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "init" }, 1324451bd67Srillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "case" }, 1334451bd67Srillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,_,_,X, "farg" }, 1344451bd67Srillig }; 135