# "host6" yields IPv6 address -------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = host6 "::";
EOF
$a = 0:0:0:0:0:0:0:0
# :: is an IPv6 address -------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::;
EOF
$a = 0:0:0:0:0:0:0:0
# ::1 is an IPv6 address ------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1;
EOF
$a = 0:0:0:0:0:0:0:1
# ::13.1.68.3 is an IPv6 address ----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::13.1.68.3;
EOF
$a = 0:0:0:0:0:0:D01:4403
# 0:0:0:0:0:0:13.1.68.3 is an IPv6 address ------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 0:0:0:0:0:0:13.1.68.3;
EOF
$a = 0:0:0:0:0:0:D01:4403
# ::FFFF:129.144.52.38 is an IPv6 address -------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::FFFF:129.144.52.38;
EOF
$a = 0:0:0:0:0:FFFF:8190:3426
# FF01::101 is an IPv6 address ------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = FF01::101;
EOF
$a = FF01:0:0:0:0:0:0:101
# 1080::8:800:200C:417A is an IPv6 address ------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1080::8:800:200C:417A;
EOF
$a = 1080:0:0:0:8:800:200C:417A
# FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 is an IPv6 address ------------------
tcc -c -Wnounused -u stderr 2>&1
$a = FEDC:BA98:7654:3210:FEDC:BA98:7654:3210;
EOF
$a = FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
# 1:2::3 is an IPv6 address ---------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2::3;
EOF
$a = 1:2:0:0:0:0:0:3
# 1:2::3:4 is an IPv6 address -------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2::3:4;
EOF
$a = 1:2:0:0:0:0:3:4
# 1:: is an IPv6 address ------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1::;
EOF
$a = 1:0:0:0:0:0:0:0
# 1:2:3:4:5:6:7 is not an IPv6 address ----------------------------------------
tcc -c 2>&1
$a = 1:2:3:4:5:6:7;
EOF
ERROR
<stdin>:1: syntax error near ":"
# IPv6 + integer (no overflow) ------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1+2;
EOF
$a = 0:0:0:0:0:0:0:3
# IPv6 + integer (one overflow) -----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::ffff+1;
EOF
$a = 0:0:0:0:0:0:1:0
# IPv6 + integer (two overflows) ----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::ffff:ffff+2;
EOF
$a = 0:0:0:0:0:1:0:1
# integer + IPv6 (no overflow) ------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1+::1;
EOF
$a = 0:0:0:0:0:0:0:2
# IPv6 + IPv6 (no overflow) ---------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1+::3;
EOF
$a = 0:0:0:0:0:0:0:4
# IPv6 + IPv6 (overflows) -----------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::fffe:ffff:0:3+::0:1:1:0:ffff;
EOF
$a = 0:0:0:1:0:0:1:2
# IPv6 - integer (no underflow) -----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::3-1;
EOF
$a = 0:0:0:0:0:0:0:2
# IPv6 - integer (one underflow) ----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::2:0-1;
EOF
$a = 0:0:0:0:0:0:1:FFFF
# IPv6 - integer (two underflows) ---------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::3:0:0-2;
EOF
$a = 0:0:0:0:0:2:FFFF:FFFE
# integer - IPv6 (no underflow) -----------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 3-::2;
EOF
$a = 0:0:0:0:0:0:0:1
# integer - IPv6 (underflow) -------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 0-::2;
EOF
$a = FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFE
# IPv6 - IPv6 (no underflow) --------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::3-::1;
EOF
$a = 0:0:0:0:0:0:0:2
# IPv6 - IPv6 (underflows) ----------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::3:0:FFFE:2:3-::1:0:FFFF:0:5;
EOF
$a = 0:0:0:1:FFFF:FFFF:1:FFFE
# IPv6 & integer --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1:0:6 & 3;
EOF
$a = 0:0:0:0:0:0:0:2
# integer & IPv6 --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 6 & ::1:0:3;
EOF
$a = 0:0:0:0:0:0:0:2
# IPv6 & IPv6 -----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1:0:6 & ::1:0:3;
EOF
$a = 0:0:0:0:0:1:0:2
# IPv6 | integer --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1:0:2 | 4;
EOF
$a = 0:0:0:0:0:1:0:6
# integer | IPv6 --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 2 | ::1:0:4;
EOF
$a = 0:0:0:0:0:1:0:6
# IPv6 | IPv6 -----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1:0:2 | ::4;
EOF
$a = 0:0:0:0:0:1:0:6
# IPv6 ^ integer --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1:0:6 ^ 3;
EOF
$a = 0:0:0:0:0:1:0:5
# integer ^ IPv6 --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 6 ^ ::1:0:3;
EOF
$a = 0:0:0:0:0:1:0:5
# IPv6 ^ IPv6 -----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::6 ^ ::1:0:3;
EOF
$a = 0:0:0:0:0:1:0:5
# IPv6 << 3 (no overflow) -----------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 << 3;
EOF
$a = 8:10:18:20:28:30:38:40
# IPv6 << 64 ------------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 0:0:0:0:5:6:7:8 << 64;
EOF
$a = 5:6:7:8:0:0:0:0
# IPv6 << 16 (overflow) -------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 0:2:3:4:5:6:7:8 << 16;
EOF
$a = 2:3:4:5:6:7:8:0
# IPv6 << 48 (overflow) -------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 0:0:0:4:5:6:7:8 << 48;
EOF
$a = 4:5:6:7:8:0:0:0
# IPv6 >> 3 (no overflow) -----------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 8:10:18:20:28:30:38:40 >> 3;
EOF
$a = 1:2:3:4:5:6:7:8
# IPv6 >> 64 ------------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 >> 64;
EOF
$a = 0:0:0:0:1:2:3:4
# IPv6 >> 16 (overflow) -------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 >> 16;
EOF
$a = 0:1:2:3:4:5:6:7
# IPv6 >> 48 (overflow) -------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 >> 48;
EOF
$a = 0:0:0:1:2:3:4:5
# IPv6 && integer -------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1 && 0;
EOF
$a = 0
# IPv6 && IPv6 ----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::1 && ::1;
EOF
$a = 1
# integer || IPv6 -------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1 || ::;
EOF
$a = 1
# IPv6 || IPv6 ----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = :: || ::;
EOF
$a = 0
# IPv6 < integer --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = :: < 1;
EOF
$a = 1
# integer >= IPv6 -------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1 >= ::2;
EOF
$a = 0
# IPv6 != IPv6 ----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::2 != ::2;
EOF
$a = 0
# IPv6 == IPv6 ----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = ::2:0 == ::1:0;
EOF
$a = 0
# IPv6 : 32 -------------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 :32;
EOF
$a = 1:2:0:0:0:0:0:0
# IPv6 : 32 : 48 --------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 : 32:48;
EOF
$a = 0:0:3:4:5:0:0:0
# IPv6 : : 48 -----------------------------------------------------------------
tcc -c -Wnounused -u stderr 2>&1
$a = 1:2:3:4:5:6:7:8 : : 48;
EOF
$a = 0:0:0:0:0:6:7:8
# size qualifier "ipv6" works -------------------------------------------------
tcc -xif:err 2>&1 | grep 'match .* action'
prio {
    class (1) if raw.ipv6/16 == 1234::;
}
EOF
match 0:0:16=0x1234 action 1
