Document Number: P1335R0 "Avoiding undefined behavior in contracts" [P1290R0] Explained John Lakos - jlakos@Bloomberg.net Revised Monday, November 26, 2018 ABSTRACT ======== DISCLAIMER: This is NOT a (new) proposal for C++20. This paper provide an attempt at explaining, in terms of the framework describe by Bloomberg in P1333R0, the proposal J. Daniel Garcia has provided in P1290R0 to address problems discovered in the WP -- e.g., see P1321R0). Note that this is a last minute addition, and only a rough draft. Any errors or misrepresentation, albeit inadvertent, is entirely the responsibility of this author. Table Of Contents ================= 1. Table Characterizing Combinations of Level Semantics in R1290R0 1. Table Characterizing Combinations of Level Semantics in R1290R0 ================================================================== In this section we simply fill in the table as suggested in section 5 of R1333R0 for the proposed required semantics of paper P01290R0 as we understand it today. The purpose here is simply to provide clarity and to facilitate informed discussion, nothing further is expressed or implied. G = Garcia's Paper R1290R0 (assuming no fifth individual CCS semantic). R1290R0 requires six more combinations out of fifty and (known through direct communication with its author) 4 additional combinations are acceptable. Note that conforming implementations for any proposal are (of course) permitted, but not (necessarily) required, to support all fifty level-assignment combinations. UNKNOWN REQUIRED | ALLOWED | | PROSCRIBED | | | Row | | | | # 'default' 'audit' 'axiom' | | | | -- ----------------------- --------------------- ------ | | | | 0 ignore ignore ignore [ ] [ ] [G] [ ] 1 assume ignore ignore [G] [ ] [ ] [ ] 2 check (never continue) ignore ignore [ ] [G] [ ] [ ] 3 check (maybe continue) ignore ignore [ ] [G] [ ] [ ] 4 check (always continue) ignore ignore [-] [-] [-] [-] 5 ignore assume ignore [G] [ ] [ ] [ ] 6 assume assume ignore [G] [ ] [ ] [ ] 7 check (never continue) assume ignore [G] [ ] [ ] [ ] 8 check (maybe continue) assume ignore [G] [ ] [ ] [ ] 9 check (always continue) assume ignore [-] [-] [-] [-] 10 ignore check (never continue) ignore [G] [ ] [ ] [ ] 11 assume check (never continue) ignore [G] [ ] [ ] [ ] 12 check (never continue) check (never continue) ignore [ ] [G] [ ] [ ] 13 check (maybe continue) check (never continue) ignore [G] [ ] [ ] [ ] 14 check (always continue) check (never continue) ignore [-] [-] [-] [-] 15 ignore check (maybe continue) ignore [G] [ ] [ ] [ ] 16 assume check (maybe continue) ignore [G] [ ] [ ] [ ] 17 check (never continue) check (maybe continue) ignore [G] [ ] [ ] [ ] 18 check (maybe continue) check (maybe continue) ignore [ ] [G] [ ] [ ] 19 check (always continue) check (maybe continue) ignore [-] [-] [-] [-] 20 ignore check (always continue) ignore [-] [-] [-] [-] 21 assume check (always continue) ignore [-] [-] [-] [-] 22 check (never continue) check (always continue) ignore [-] [-] [-] [-] 23 check (maybe continue) check (always continue) ignore [-] [-] [-] [-] 24 check (always continue) check (always continue) ignore [-] [-] [-] [-] 25 ignore ignore assume [ ] [ ] [G] [ ] 26 assume ignore assume [G] [ ] [ ] [ ] 27 check (never continue) ignore assume [ ] [ ] [G] [ ] 28 check (maybe continue) ignore assume [ ] [ ] [G] [ ] 29 check (always continue) ignore assume [-] [-] [-] [-] 30 ignore assume assume [G] [ ] [ ] [ ] 31 assume assume assume [G] [ ] [ ] [ ] 32 check (never continue) assume assume [G] [ ] [ ] [ ] 33 check (maybe continue) assume assume [G] [ ] [ ] [ ] 34 check (always continue) assume assume [-] [-] [-] [-] 35 ignore check (never continue) assume [G] [ ] [ ] [ ] 36 assume check (never continue) assume [G] [ ] [ ] [ ] 37 check (never continue) check (never continue) assume [ ] [ ] [G] [ ] 38 check (maybe continue) check (never continue) assume [G] [ ] [ ] [ ] 39 check (always continue) check (never continue) assume [-] [-] [-] [-] 40 ignore check (maybe continue) assume [G] [ ] [ ] [ ] 41 assume check (maybe continue) assume [G] [ ] [ ] [ ] 42 check (never continue) check (maybe continue) assume [G] [ ] [ ] [ ] 43 check (maybe continue) check (maybe continue) assume [G] [ ] [G] [ ] 44 check (always continue) check (maybe continue) assume [-] [-] [-] [-] 45 ignore check (always continue) assume [-] [-] [-] [-] 46 assume check (always continue) assume [-] [-] [-] [-] 47 check (never continue) check (always continue) assume [-] [-] [-] [-] 48 check (maybe continue) check (always continue) assume [-] [-] [-] [-] 49 check (always continue) check (always continue) assume [-] [-] [-] [-]