On Tue, Dec 1, 2015 at 5:17 PM, Greg Stark <st...@mit.edu> wrote: > Sorry, I didn't look at it since. At the time I was using Xi Wang's software > to find the overflow checks that need to be redone. He published a paper on > it and it's actually pretty impressive. It constructs a constraint problem > and then throws a kSAT solver at it to find out if there's any code that a > compiler could optimize away regardless of whether any existant compiler is > actually capable of detecting the case and optimizing it away. > https://pdos.csail.mit.edu/papers/stack:sosp13.pdf
I did get this code running again (it was quite a hassle actually). Attached is the report. I'm leaning towards using the builtin functions described here http://clang.llvm.org/docs/LanguageExtensions.html#checked-arithmetic-builtins https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html They aren't in older GCC and clang and probably won't be in icc and the like but we could probably implement replacements. The downside is that then we wouldn't be able to use the generic one and would have to use the type-specific ones which would be annoying. The Linux kernel folk wrote wrappers that don't have that problem but they depend on type_min() and type_max() which I've never heard of and have no idea what support they have? What version of GCC and other compilers did we decide we're targeting now? -- greg
--- bug: anti-simplify model: | %cmp48 = icmp ne i8* %30, null, !dbg !1018 --> true stack: - /home/stark/src/pg/postgresql-master/src/backend/storage/lmgr/lmgr.c:712:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/storage/lmgr/lmgr.c:713:0 - null pointer dereference --- bug: anti-algebra model: | %cmp = icmp ult i8* %add.ptr1, %start_address, !dbg !500 --> %16 = icmp slt i64 %15, 0, !dbg !500 ************************************************************ (4 + (8 * (sext i32 %7 to i64)) + %start_address) <u %start_address --> (4 + (8 * (sext i32 %7 to i64))) <s 0 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/time/combocid.c:326:0 ncore: 2 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/time/combocid.c:324:0 - pointer overflow - /home/stark/src/pg/postgresql-master/src/backend/utils/time/combocid.c:324:0 - pointer overflow --- bug: anti-simplify model: | %cmp3 = icmp slt i32 %add, 0, !dbg !595 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int.c:756:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int.c:754:0 - signed addition overflow --- bug: anti-algebra model: | %cmp2 = icmp slt i32 %add1, %s, !dbg !570 --> %6 = icmp slt i32 %l, 0, !dbg !570 ************************************************************ (%s + %l) <s %s --> %l <s 0 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varbit.c:1063:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varbit.c:1057:0 - signed addition overflow --- bug: anti-simplify model: | %cmp5 = icmp sle i32 %add, %sl, !dbg !568 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varbit.c:1170:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varbit.c:1169:0 - signed addition overflow --- bug: anti-algebra model: | %cmp3 = icmp slt i32 %add, %start, !dbg !878 --> %2 = icmp slt i32 %length, 0, !dbg !878 ************************************************************ (%start + %length) <s %start --> %length <s 0 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:834:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:828:0 - signed addition overflow --- bug: anti-algebra model: | %cmp31 = icmp slt i32 %add30, %start, !dbg !907 --> %29 = icmp slt i32 %length, 0, !dbg !907 ************************************************************ (%start + %length) <s %start --> %length <s 0 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:898:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:892:0 - signed addition overflow --- bug: anti-simplify model: | %cmp5 = icmp sle i32 %add, %sl, !dbg !876 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:1047:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:1046:0 - signed addition overflow --- bug: anti-algebra model: | %cmp1 = icmp slt i32 %add, %S, !dbg !875 --> %2 = icmp slt i32 %L, 0, !dbg !875 ************************************************************ (%S + %L) <s %S --> %L <s 0 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:2594:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:2588:0 - signed addition overflow --- bug: anti-simplify model: | %cmp5 = icmp sle i32 %add, %sl, !dbg !877 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:2666:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/varlena.c:2665:0 - signed addition overflow --- bug: anti-simplify model: | %cmp19 = icmp slt i64 %mul, 0, !dbg !583 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:576:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:561:0 - signed multiplication overflow --- bug: anti-simplify model: | %cmp2 = icmp sgt i64 %1, 0, !dbg !580 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:711:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:709:0 - signed addition overflow --- bug: anti-simplify model: | %cmp2 = icmp slt i64 %1, 0, !dbg !580 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:755:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/int8.c:753:0 - signed subtraction overflow --- bug: anti-dce model: | %cmp36 = icmp eq i64 %val.1, 0, !dbg !964 --> true ************************************************************ lor.lhs.false38: %cmp39 = icmp slt i64 %val.0, 0, !dbg !964 br i1 %cmp39, label %if.then41, label %if.end42, !dbg !964 stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/numeric.c:5233:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/numeric.c:5233:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp61 = icmp sle i32 %add58, %mul57, !dbg !542 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/oracle_compat.c:1056:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/oracle_compat.c:1054:0 - signed addition overflow --- bug: anti-simplify model: | %cmp6 = icmp slt i32 %add5, %sub, !dbg !539 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/array_userfuncs.c:117:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/array_userfuncs.c:114:0 - signed addition overflow --- bug: anti-simplify model: | %cmp59 = icmp sgt i64 %sub52, 0, !dbg !878 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/datetime.c:1557:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/datetime.c:1556:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp79 = icmp sgt i64 %sub72, 0, !dbg !882 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/datetime.c:1563:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/datetime.c:1562:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp105 = icmp slt i32 %add, %conv, !dbg !680 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/float.c:2768:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/float.c:2766:0 - signed addition overflow --- bug: anti-simplify model: | %cmp136 = icmp slt i32 %add135, %conv, !dbg !700 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/float.c:2784:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/utils/adt/float.c:2782:0 - signed addition overflow --- bug: anti-dce model: | entry: %call = call i32 @p_isalnum(%struct.TParser* null), !dbg !1025 %call.i = call i32 @p_isalnum(%struct.TParser* null) #7, !dbg !1026 %call2 = call i32 @p_isalpha(%struct.TParser* null), !dbg !1028 %call.i1 = call i32 @p_isalpha(%struct.TParser* null) #7, !dbg !1029 %call4 = call i32 @p_isdigit(%struct.TParser* null), !dbg !1031 %call.i5 = call i32 @p_isdigit(%struct.TParser* null) #7, !dbg !1032, !macro !1034 %call6 = call fastcc i32 @p_islower(%struct.TParser* null), !dbg !1035 %call.i9 = call fastcc i32 @p_islower(%struct.TParser* null) #7, !dbg !1036, !macro !1034 %call8 = call fastcc i32 @p_isprint(%struct.TParser* null), !dbg !1038 %call.i13 = call fastcc i32 @p_isprint(%struct.TParser* null) #7, !dbg !1039, !macro !1034 %call10 = call fastcc i32 @p_ispunct(%struct.TParser* null), !dbg !1041 %call.i17 = call fastcc i32 @p_ispunct(%struct.TParser* null) #7, !dbg !1042, !macro !1034 %call12 = call i32 @p_isspace(%struct.TParser* null), !dbg !1044 %call.i21 = call i32 @p_isspace(%struct.TParser* null) #7, !dbg !1045, !macro !1034 %call14 = call fastcc i32 @p_isupper(%struct.TParser* null), !dbg !1047 %call.i25 = call fastcc i32 @p_isupper(%struct.TParser* null) #7, !dbg !1048, !macro !1034 %call16 = call i32 @p_isxdigit(%struct.TParser* null), !dbg !1050 %call.i29 = call i32 @p_isxdigit(%struct.TParser* null) #7, !dbg !1051, !macro !1034 call void @opt.bugon(i1 true), !dbg !1053, !bug !1057 call void @opt.bugon(i1 true), !dbg !1053, !bug !1058 %0 = load %struct.TParserPosition** getelementptr (%struct.TParser* null, i32 0, i32 6), align 8, !dbg !1053, !macro !1059 %tobool.i33 = icmp ne %struct.TParserPosition* %0, null, !dbg !1053, !macro !1059 br i1 %tobool.i33, label %if.end.i, label %if.then.i, !dbg !1053, !macro !1059 stack: - /home/stark/src/pg/postgresql-master/src/backend/tsearch/wparser_def.c:639:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/tsearch/wparser_def.c:576:0 - buffer overflow --- bug: anti-simplify model: | %cmp33 = icmp sgt i32 %add, 0, !dbg !755 --> true stack: - /home/stark/src/pg/postgresql-master/src/backend/tsearch/spell.c:1634:0 ncore: 2 core: - /home/stark/src/pg/postgresql-master/src/backend/tsearch/spell.c:1624:0 - signed subtraction overflow - /home/stark/src/pg/postgresql-master/src/backend/tsearch/spell.c:1624:0 - signed addition overflow --- bug: anti-dce model: | %cmp44 = icmp slt i64 %add, %17, !dbg !1346 --> false ************************************************************ if.then46: %posOverflow = getelementptr inbounds %struct.PortalData* %portal, i32 0, i32 23, !dbg !1348 %20 = icmp eq %struct.PortalData* %portal, null call void @opt.bugon(i1 %20), !dbg !1348, !bug !1308 store i8 1, i8* %posOverflow, align 1, !dbg !1348 br label %if.end47, !dbg !1348 stack: - /home/stark/src/pg/postgresql-master/src/backend/tcop/pquery.c:960:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/tcop/pquery.c:957:0 - signed addition overflow --- bug: anti-simplify model: | %cmp114 = icmp sgt i64 %sub, %39, !dbg !1393 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/tcop/pquery.c:1010:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/tcop/pquery.c:1009:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp72 = icmp sle i32 %add, 0, !dbg !2117 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/executor/execQual.c:3188:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/executor/execQual.c:3187:0 - signed addition overflow --- bug: anti-simplify model: | %cmp12 = icmp sle i32 %add, 0, !dbg !824 --> false stack: - /home/stark/src/pg/postgresql-master/src/backend/regex/./regc_locale.c:438:0 ncore: 2 core: - /home/stark/src/pg/postgresql-master/src/backend/regex/./regc_locale.c:437:0 - signed subtraction overflow - /home/stark/src/pg/postgresql-master/src/backend/regex/./regc_locale.c:437:0 - signed addition overflow --- bug: anti-simplify model: | %cmp29 = icmp ne i8* %cond, null, !dbg !1083 --> true stack: - /home/stark/src/pg/postgresql-master/src/backend/access/gist/gist.c:1007:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/access/gist/gist.c:1004:0 - null pointer dereference --- bug: anti-simplify model: | %tobool36 = icmp ne %struct.List* %rollup_lists.addr.0, null, !dbg !2266 --> true stack: - /home/stark/src/pg/postgresql-master/src/backend/optimizer/plan/planner.c:2548:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/backend/optimizer/plan/planner.c:2507:20 - null pointer dereference --- bug: anti-simplify model: | %cmp129 = icmp sgt i32 %sub, %loop_value.0, !dbg !2917 --> false stack: - /home/stark/src/pg/postgresql-master/src/pl/plpgsql/src/pl_exec.c:2071:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/pl/plpgsql/src/pl_exec.c:2071:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp135 = icmp slt i32 %add, %loop_value.0, !dbg !2924 --> false stack: - /home/stark/src/pg/postgresql-master/src/pl/plpgsql/src/pl_exec.c:2077:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/pl/plpgsql/src/pl_exec.c:2077:0 - signed addition overflow --- bug: anti-simplify model: | %tobool97 = icmp ne i32 %conv4.i, 0, !dbg !236 --> false stack: - /home/stark/src/pg/postgresql-master/src/bin/initdb/localtime.c:1202:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/bin/initdb/localtime.c:1290:0 - signed addition overflow --- bug: anti-simplify model: | %cmp3 = icmp ne i32 %conv, %conv2, !dbg !197 --> false stack: - /home/stark/src/pg/postgresql-master/src/bin/initdb/localtime.c:1291:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/bin/initdb/localtime.c:1290:0 - signed addition overflow --- bug: anti-simplify model: | %cmp556 = icmp slt i64 %sub555, 0, !dbg !825 --> false stack: - /home/stark/src/pg/postgresql-master/src/bin/pgbench/pgbench.c:1533:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/bin/pgbench/pgbench.c:1533:0 - signed subtraction overflow --- bug: anti-simplify model: | %cmp561 = icmp slt i64 %add560, 0, !dbg !825 --> false stack: - /home/stark/src/pg/postgresql-master/src/bin/pgbench/pgbench.c:1533:0 ncore: 2 core: - /home/stark/src/pg/postgresql-master/src/bin/pgbench/pgbench.c:1533:0 - signed subtraction overflow - /home/stark/src/pg/postgresql-master/src/bin/pgbench/pgbench.c:1533:0 - signed addition overflow --- bug: anti-simplify model: | %cmp9 = icmp sle i64 %add, %t1, !dbg !402 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2674:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2673:0 - signed addition overflow --- bug: anti-simplify model: | %cmp12 = icmp sge i64 %add, %t1, !dbg !402 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2674:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2673:0 - signed addition overflow --- bug: anti-simplify model: | %cmp1 = icmp sle i64 %add, %t1, !dbg !396 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2656:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2655:0 - signed addition overflow --- bug: anti-simplify model: | %cmp4 = icmp sge i64 %add, %t1, !dbg !396 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2656:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/zic.c:2655:0 - signed addition overflow --- bug: anti-simplify model: | %tobool97 = icmp ne i32 %conv4.i, 0, !dbg !236 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/localtime.c:1202:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/localtime.c:1290:0 - signed addition overflow --- bug: anti-simplify model: | %cmp3 = icmp ne i32 %conv, %conv2, !dbg !197 --> false stack: - /home/stark/src/pg/postgresql-master/src/timezone/localtime.c:1291:0 ncore: 1 core: - /home/stark/src/pg/postgresql-master/src/timezone/localtime.c:1290:0 - signed addition overflow
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers