Goose  Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

229 check-ins using file bs/diagnostics/renderer.h version aed0684a8c

2021-09-17
23:04
g0api, builtins: got rid of TermWrapper and ValueWrapper, use specializations of TypeWrapper instead to allow for more generic code check-in: 4a571387ed user: achavasse tags: trunk
20:43
g0 api: more work on the CIR api check-in: a7c05af907 user: achavasse tags: trunk
19:15
g0 api:
  • extended the generic TypeWrapper to handle pointers to types that aren't part of the Term variant
  • more work on the CIR api
check-in: ab9c71d048 user: achavasse tags: trunk
2021-09-16
21:31
g0 api: started implementing the CIR api check-in: 8dd49b0d89 user: achavasse tags: trunk
21:01
g0 api: implemented Value api check-in: 5c68efeb07 user: achavasse tags: trunk
20:05
g0 api: the EIR Terms are now completely covered check-in: 78da84d2af user: achavasse tags: trunk
19:00
More work on the g0 EIR api check-in: 967d3ba3d7 user: achavasse tags: trunk
2021-09-15
22:15
Fixed the generic CTType and RTType patterns, and removed the super generic assignment operator overload that would accept literally any type check-in: ea7c04df2f user: achavasse tags: trunk
21:24
  • VecOfLength() will now match vectors of compatible length, taking repetition terms into account
  • Vector unification and typechecking rules now handle vectors of variable lengths
check-in: a4f1ada98c user: achavasse tags: trunk
01:02
More work on the extensibility api check-in: 29872be1f2 user: achavasse tags: trunk
00:11
Added a test for, and fixed tctrie variable length vector type checking check-in: c1b565fdda user: achavasse tags: trunk
2021-09-13
21:52
  • Implemented a generic wrapper for the simple native types that can be embedded in Terms
  • Added more specific overloads for the assignment operator that should work only on builtin types, so that library and user defined types will be able to choose whether they're copyable
  • The EIR representation for all builtin runtime types are now prefixed with "rt_type" to more easily write generic matching rules against them
  • EIR: Fixed long standing bugs in Enumerate and Decompose that surfaced because of the above
  • Miscellaneous code cleaning
check-in: 51f288ba2a user: achavasse tags: trunk
2021-09-12
23:52
Repo: syntax color theme change check-in: b4fe430e44 user: achavasse tags: trunk
23:20
Repo: more syntax highlighting workarounds check-in: 6c481d18a4 user: achavasse tags: trunk
23:18
Repo: syntax highlighting issue workaround check-in: 4b28030b9a user: achavasse tags: trunk
23:09
Updated repo's syntax highlighting check-in: 951c8fed08 user: achavasse tags: trunk
21:38
  • Fixed TermRef
  • Began implementing the api to manipulate the EIR
check-in: 13e21deeef user: achavasse tags: trunk
16:48
  • Started work on extensibility api
  • some code cleanup
check-in: 55beba911a user: achavasse tags: trunk
13:43
Small cleanup check-in: 9345aa6eae user: achavasse tags: trunk
13:42
Adopted a new convention for source extensions: .g0 for prelude code (where most language features won't be available), .g1 for user code check-in: 45f663093d user: achavasse tags: trunk
12:34
Split out the compile time api function out of builtins and into their own library check-in: b397dc5a7c user: achavasse tags: trunk
2021-09-11
23:40
Builtins: api: added an object to wrap a term reference check-in: 5a2d5b8a8b user: achavasse tags: trunk
23:02
Builtin funcs: added a wrapper for constant valued parameter (to be able to overloaded api functions depending on enum values) check-in: f4ea7d08af user: achavasse tags: trunk
19:44
  • Fixed execution of void intrinsic function causing a bogus error message
  • Fixed the intrinsic operator
check-in: bc64264206 user: achavasse tags: trunk
15:05
  • template functions can now be intrinsic
  • implemented the "intrinsic" operator to create intrinsic functions
  • some code cleanup
check-in: ba2f4e9f95 user: achavasse tags: trunk
2021-09-10
00:02
Parser: when parsing a function overload, instead of directly adding it to the overload set, push an "Overload" value that performs the addition in DropValue(). This will allow operators to modify overloads before they are added to an overload set. check-in: 5f4eeaef12 user: achavasse tags: trunk
2021-09-09
18:21
Implemented the $$ operator to create a forwarding template variable check-in: 9b9f4b0fa9 user: achavasse tags: trunk
18:12
Implemented non-builtin intrinsic function invocation check-in: 121560d1c1 user: achavasse tags: trunk
2021-09-01
23:26
Some cleanup and small reorganization in preparation for implementing non builtin intrinsic functions check-in: bbd2c17c42 user: achavasse tags: trunk
2021-08-31
23:10
  • Added extension points to transform parameter types and function arguments
  • Fixed the incorrect type predicate type checking rule which should just preserve the argument's predicates as is
  • Fixed verification of return intructions that were checking the returned value's predicates, instead of the return type predicates (which happened to work anyway until the above fix)
check-in: 4b842721d2 user: achavasse tags: trunk
2021-08-29
21:49
  • Type predicates' identity and placeholder are now created immediately, rather than when parsing their content
  • Added missing type predicates lazy parsing during typechecking
  • Fixed a type checking rule falling back to unification, which is no longer needed
check-in: 2d2defb442 user: achavasse tags: trunk
19:13
Removed stray debugging code. check-in: 7e15ecf852 user: achavasse tags: trunk
2021-08-28
17:55
  • Instead of falling back to unification as the default type checking rule, implemented default type checking rules similar to the default unification ones
  • Fixed a nasty generator bug
  • Fixed reference type parsing not generating a location
  • Fixed where operator not generating a location that spanned both the types and the predicates
  • Various fixes to accomodate random api changes in the latest llvm
  • Updates fmt and catch2 versions
check-in: 46e87c202b user: achavasse tags: trunk
2021-06-15
21:14
Small fixes check-in: 05a35f70f0 user: achavasse tags: trunk
2021-06-11
11:42
  • Removed the Conversion step, it could all be done using PostProcessing callback, there were just TypeChecking rules missing to unwrap the callbacks...
  • Fixed some ill defined reference type checking rules
  • Runtime integers no longer have a default initializer of 0. This isn't that useful considering that 0 may not be valid depending on the refinement conditions applied to the type
check-in: 91a6550edb user: achavasse tags: trunk
2021-04-11
13:10
Implemented a way to track down (in debug builds) which typechecking rules were used to select a given function overload that doesn't involve peppering half the code base with debug prints and then painstakingly poring over a gigantic log check-in: 4ece399a6f user: achavasse tags: trunk
2021-03-19
21:49
Verification: when loading a value from memory, emit assumptions for its type's refinement conditions. check-in: 5d2f26492e user: achavasse tags: trunk
2021-03-18
12:42
Verifier: get rid of a helper that's no longer needed check-in: 3e169a34af user: achavasse tags: trunk
2021-03-17
12:17
Verifier: force z3 to use its old arithmetic solver for now to prevent one of the verifier test to hang with recent z3 versions. check-in: 71c91d9322 user: achavasse tags: trunk
00:41
  • Added a Conversion step after typechecking, to take care of conversions that aren't practical to do during typechecking itself.
  • Added back a proper ct_int to rt_int conversion step that diagnoses out of range integer constants
check-in: b48e7b7507 user: achavasse tags: trunk
2021-03-05
17:56
Implemented refinement type predicate unification. Predicate violations by variable initialization are now properly detected. check-in: b2945b5bb1 user: achavasse tags: trunk
2021-03-04
23:22
Improved diagnostics rendering a little check-in: 3ca76452a1 user: achavasse tags: trunk
21:47
  • Refactored and simplified the way integer and string constants are handled: we no longer try to resolve them during typechecking, this breaks when parametric types are involved and also it makes no sense, typechecking is about types, not values
  • Fixed multiple places where locationIds weren't propagated
  • Verifier: variable assignments now verify the destination variable type's refinement conditions
  • Fixed a test where the above change detected a bug, kept the bugged version as a new verification failure test
check-in: 3cf6ab5249 user: achavasse tags: trunk
2021-03-02
22:51
Removed magic "tuple of types to tuple type" conversions and moved them into extension points so that any type can implement similar semantics check-in: 2370e98869 user: achavasse tags: trunk
2021-03-01
20:21
Split the verification tests into more subdirectories. check-in: 48b0306e20 user: achavasse tags: trunk
12:32
Reorganized tests, they are now grouped by language feature. check-in: 5e757567a6 user: achavasse tags: trunk
2021-02-25
20:38
Small cleanup check-in: 9d548bcd22 user: achavasse tags: trunk
20:35
Fixed the creation of references to tuple types, and a reference typechecking rule priority issue. Re-enabled the last previously disabled reference test, which now works again. check-in: 2f6b5946cf user: achavasse tags: trunk
18:37
CodeBuilder: minor optimization check-in: 7f3be49341 user: achavasse tags: trunk
12:10
Implemented a new method to order function overloads. Enabled several new reference tests which are now working properly. check-in: 52ea24b083 user: achavasse tags: trunk
2021-02-21
17:15
Improved the #DumpValue debugging intrinsic check-in: cb0fd19317 user: achavasse tags: trunk
2021-02-19
20:48
Fix anonymous functions not getting compiled anymore due to an old bug. Added a test for that, since it turns out there weren't any check-in: 22b3b50b4f user: achavasse tags: trunk
2021-02-18
20:32
Removed stray debugging profanity. check-in: 8cdafa4fa4 user: achavasse tags: trunk
19:35
Implemented reference initialization, so reference local variables can now be declared, and added a typechecking rule preventing template variables to bind to reference types.

Then fixed a MILLION horrible problems caused by all that. Now almost everything works again. *sobs* check-in: 9b058524b4 user: achavasse tags: trunk

2021-02-13
21:21
Hole unification: preserve the flavor term check-in: 9d94af0817 user: achavasse tags: trunk
2021-02-12
23:57
Added a "flavor" term to holes to be able to have specific rules for TVar holes and for forwarding holes. Refactored forwarding holes to use this, instead of being represented as compound expressions (which would probably have broken down horribly in some complex type checking scenarios) check-in: 176ee856a6 user: achavasse tags: trunk
2021-02-11
11:59
Fixed some long standing meson warnings, enabled more c++ warnings, and fixed them check-in: fbe6ea9f31 user: achavasse tags: trunk
2021-02-08
12:52
Implemented forwarding, use it for decl assignments. check-in: 102a2b2fc7 user: achavasse tags: trunk
2021-02-05
22:58
Sema: typecheck: try rules in descending scoring order until we find one that yields any result. check-in: aad44e1516 user: achavasse tags: trunk
2021-02-03
12:52
Fix llvm passbuilder params to stop inadvertently enabling debug mode due to an api change. check-in: 29f1006d63 user: achavasse tags: trunk
2021-02-02
20:46
CIR expressions pretty printing check-in: bcca4c51ba user: achavasse tags: trunk
2021-02-01
19:26
Added a rule based system to pretty print EIR expressions in a less horrific way. check-in: 6675f81702 user: achavasse tags: trunk
12:56
Correctly handle references to references, plus some code cleaning. check-in: ba909d1a94 user: achavasse tags: trunk
2021-01-21
21:05
Removed the vector "typechecking rule", whose existence made no sense. Typechecking rules should operate only on values and pattern of values. Typechecking multiple values against multiple params is now done through a specific function instead. check-in: 7b9f645074 user: achavasse tags: trunk
2021-01-13
11:46
Sema: simplification: the "half-unification" rules don't need to be generators, they can only output one result. check-in: 3bf30e74ac user: achavasse tags: trunk
2021-01-12
21:08
Implemented missing lowering of reference types to pointer types, added a bunch of runtime/compilation time reference tests. check-in: 90c951f66f user: achavasse tags: trunk
2021-01-11
20:20
Reorganized symbols visibility a bit to avoid local variables from the enclosing function to be visible inside of function parameter list declarations (which prevented reusing them as parameter names). check-in: 52280a3c5c user: achavasse tags: trunk
2021-01-07
16:26
Fixed template references. check-in: 54e783e254 user: achavasse tags: trunk
2021-01-03
18:34
Fixed a bug with addresses computed during compilation time execution. Mutating values through references passed as parameters now works, at compilation time at least. check-in: 3eebbcff0c user: achavasse tags: trunk
15:44
cir: load, store and select store their base addresses directly as cir instructiions, rather than wrapped into eir values, which is useless there. check-in: 4cc7a833f8 user: achavasse tags: trunk
2021-01-02
18:24
Yet one more reference/address refactor: each calculation step (getting temp addr, getting var addr, selecting a member) is now a separate cir instruction. We need this level of generalization to be able to obtain addresses from anywhere, including variables and function parameters. check-in: 26c691ecb9 user: achavasse tags: trunk
18:00
Some more renaming. check-in: 0345b9f807 user: achavasse tags: trunk
2020-12-27
14:40
Renamed "ir" to "eir" (expression intermediate representation) and "llr" to "cir" (code intermediate representation) for clarity. check-in: 7d2def7b75 user: achavasse tags: trunk
2020-12-26
14:59
Build fix check-in: c8058eaaf9 user: achavasse tags: trunk
2020-12-18
01:29
References refactor: references are now values all the way to the llr, where a new "CalcAddress" instruction represents a conversion from a logical address (location + path) into an actual runtime or compilation time address. This is in preparation to allow references to be stored in variables or passed as parameters. (It just took 4.5 months to finish this... Refactoring just sucks) check-in: 8ddd71f9b2 user: achavasse tags: trunk
2020-08-02
19:26
Execute: use a proper call stack so that we'll be able later on to reference values living on the caller's stack to be able to pass references around at compilation time. check-in: 151e3b4d8c user: achavasse tags: trunk
2020-07-07
21:08
When creating a reference to a local variable, if it contains a reference, just unwrap it. check-in: 421381dc15 user: achavasse tags: trunk
2020-07-06
19:49
Fixes for the current git version of clang/llvm. check-in: 834d8f14b9 user: achavasse tags: trunk
2020-07-05
20:15
Implemented reference parsing. check-in: 086a58a7a3 user: achavasse tags: trunk
2020-07-04
13:08
  • Verifier: fixed havocing of individual members of aggregate types not working.
  • Added verification loop tests (both passing and failing) that modify a tuple inside of the loop.
check-in: e3b9bd4c1b user: achavasse tags: trunk
12:24
Verification: fixed a bug with address havocing. check-in: 879d75711b user: achavasse tags: trunk
2020-07-03
23:09
Removed a couple of obsolete comments. check-in: 4dd8529aac user: achavasse tags: trunk
23:03
  • Fixed reference typechecking issues.
  • Fixed tuple initialization.
  • Added verification tests involving values stored in tuples.
check-in: 4be05b9f94 user: achavasse tags: trunk
2020-07-02
19:31
Added tests for tuples of references. check-in: 05ec684dbf user: achavasse tags: trunk
00:47
  • Added overloads to the comma operator to be able to construct tuples of references.
  • Fixed reference typechecking rules so that overloads taking values directly have priority over overloads taking references.
  • Fixed a template function expression parsing bug.
check-in: 04aea08600 user: achavasse tags: trunk
2020-06-27
22:05
Clearly separate the type checking rules and the unification rules, instead of lumping them all together in a single set of patterns which is increasingly confusing. check-in: b64ea47f6b user: achavasse tags: trunk
2020-06-26
23:34
Cleanup:
  • Removed the poorly thought out "domain" system that was intended to allow for different implementations of functions for runtime and for compilation time, which was adding an absurd amount of crap everywhere and should be unnecessary with the current planned approach for implementing data structures.
  • The using statement doesn't do lazy parsing anymore. Lazy parsing is better left to specific constructs that require them (such as function bodies and later on class/structs). This removes the only case of significant newline character in the language.
check-in: 568c366a36 user: achavasse tags: trunk
2020-06-20
19:59
Verifier: some fixes to correctly handle tuples. Still not quite working yet. check-in: 060e84f233 user: achavasse tags: trunk
16:07
Fixed one of the tuple unification rule. check-in: 48bb81ebdd user: achavasse tags: trunk
14:32
  • Got rid of the gross system of performing unifications twice in all cases. It's only really needed when invoking template functions.
  • Since the above had the unexpected side effect of fixing the tuple Initialize() overloads not being called, fixed those (which were actually broken).
check-in: c3f897359f user: achavasse tags: trunk
2020-06-15
22:09
Refactored the integer/ct_int unification to defer the size/sign check to a postprocessing callback. check-in: ac4e681af3 user: achavasse tags: trunk
19:45
Call "Postprocess" on unification solutions during the best solution lookup, so that custom postprocessing callbacks can trigger the rejection of a solution. check-in: daee557086 user: achavasse tags: trunk
19:16
Moved some common code into a helper function to facilitate some future refactoring. check-in: df0ad9a7f1 user: achavasse tags: trunk
2020-06-13
22:59
  • Implemented Initialize overloads for tuples.
  • Lots of cleanup.
check-in: 947b9d7cfc user: achavasse tags: trunk
13:34
Implemented new rules for implicit dereferencing and implicit referencing. check-in: 4d5cc07d86 user: achavasse tags: trunk
13:15
Rewrote the reference unification rules. check-in: ba97c17dee user: achavasse tags: trunk
13:05
Fixed eager evaluation not failing gracefully in some cases. check-in: c70d722331 user: achavasse tags: trunk
12:51
Modify the reference IR representation so that we can have holes for the behavior. check-in: 385846b609 user: achavasse tags: trunk
2020-06-05
18:57
Verifier: loops: instead of tracking and havocing modified variables during loops, track modified addresses, so that modifying only some fields of a tuple will not result in forgetting everything about the other fields. check-in: 54ef60956e user: achavasse tags: trunk
00:42
Cleanup. check-in: ea28d09f80 user: achavasse tags: trunk
00:35
Verifier: handle "StoreToAddress" for addresses that point to tuple members. check-in: 077c944c02 user: achavasse tags: trunk
2020-06-03
23:08
  • Verifier: a bunch of refactoring to better keep track of the types of the z3 expressions stored in variables.
  • Verifier: handle "LoadFromAddress" for addresses that point to tuple members.
check-in: b00c682e34 user: achavasse tags: trunk
2020-06-01
18:39
Verifier: go through the LowerConstantForVerification extension point when building a constant expression. check-in: 98739f02b6 user: achavasse tags: trunk
01:21
Cleanup. check-in: c793734a0a user: achavasse tags: trunk
01:06
Verifier: refactored type handling and extended it to handle tuple types. check-in: 6f98718d3b user: achavasse tags: trunk
2020-05-30
14:25
Enable's z3 new arith solver as the old one takes a very long time in one of the tests with the latest version of z3. check-in: 4b56796791 user: achavasse tags: trunk
2020-05-25
22:08
  • Added a "LowerConstantForRuntime" extension point, similar to LowerTypeForRunTime.
  • Added a way to represent Record constants.
  • Implemented LowerConstantForRunTime for tuples, which lowers them into a constant record.
  • Implemented codegen for constant records.
  • Implemented codegen for storing an aggregate constant.
  • Implemented a way (not exposed in the syntax for now) to create vararg function types, to be able to call vararg external functions such as printf.
  • Enabled the tuple runtime/compilation combined test which is now working.
  • Various bug fixes.
check-in: bb17e9f3dd user: achavasse tags: trunk
2020-05-23
12:58
  • Fixed the hole matching score which prevented some unification rules to be selected.
  • Implemented LowerTypeForRuntime for tuples.
  • Implemented an unification rule for constant tuples.
  • Added some debugging helpers.
check-in: c39a302502 user: achavasse tags: trunk
2020-05-21
17:26
Created a new term type to represent holes in IR expressions. The old system of representing holes using a vector of two values led to ambiguousness when creating some rule patterns: a tuple whose both type vector and payload vector were holes would be indistinguishable from a tuple containing two elements. check-in: 51c6751b6d user: achavasse tags: trunk
2020-05-19
17:07
Added an unification rule for computed tuples which creates constant references for each members and unifies them. check-in: 2ecfa85c23 user: achavasse tags: trunk
15:03
The TemporaryAddress address calculation mode now carries around the initializer value, in case the temporary doesn't already exist. This allows a reference to a temporary to be completely self contained in its value, rather than requiring a separate setup instruction to be emited in the cfg. check-in: 934090c5a8 user: achavasse tags: trunk
2020-05-18
12:39
  • Renamed the LowerType extension point to LowerTypeForRuntime as we'll need a similar "LowerTypeForVerification" later on.
  • The function type case of LowerTypeForRuntime is no longer hardcoded in the c++ utility function of the same name but implemented as an overload of the extension point.
check-in: 8818ea1872 user: achavasse tags: trunk
2020-05-17
17:30
  • Clean up the "default return value from top level file functions" stuff.
  • Standardize to a default return value of 0 for the top level file both in execution mode and in compilation mode.
  • Implemented a combined execution/compilation test for tuples in preparation for implementing tuple compilation. (not enabled yet)
check-in: 397f594186 user: achavasse tags: trunk
2020-05-16
19:32
Repo: fix syntax highlighting with the latest trunk verison of fossil. check-in: 807a4f208b user: achavasse tags: trunk
19:21
Minor cleanups. check-in: 6099081bdd user: achavasse tags: trunk
18:39
Now that we can assign mutable references, it is possible to assign to a tuple member. Added a test for that. check-in: 27a74436f3 user: achavasse tags: trunk
18:32
The builtin assignment operator overloads now return the reference to support chained assignments. check-in: ba2a02025d user: achavasse tags: trunk
2020-05-14
22:24
The compound assignment operators now take a mutable reference as the lhs. check-in: e4cd7e104e user: achavasse tags: trunk
2020-05-13
18:15
References:
  • When doing variable declaration local type inference, look for an initialization function that takes a mutable reference on the lhs, instead of a local variable.
  • As a result of the above, got rid of Initialize() overloads for local variables.
  • The assignment operator now takes a mutable reference on the lhs, instead of directly working on a local variable.
check-in: ebdba2e941 user: achavasse tags: trunk
2020-05-04
18:43
Refactored the Initialize() extension point to take a mutable reference instead of directly taking a locvar. check-in: 10df99e08a user: achavasse tags: trunk
2020-05-03
15:32
Simplified the llr address representation. check-in: 0b4eb97a44 user: achavasse tags: trunk
2020-04-22
23:27
Removed llr::SetVar, now using the more generic llr::Store instead. check-in: 036092faf1 user: achavasse tags: trunk
2020-04-15
06:36
Removed llr::GetVar, now using the more generic llr::Load instead. check-in: 20c242dc4f user: achavasse tags: trunk
2020-04-11
23:33
Updated to the latest git version of llvm. check-in: d38aab5fc2 user: achavasse tags: trunk
21:01
  • Implemented load, store and pointers in execute and codegen.
  • Implemented load and pointers in verify.
  • When unifying a local variable against a parameter, generate a reference.
check-in: e814ad7e23 user: achavasse tags: trunk
2020-03-11
22:11
Reference: implemented a pattern provider for mutable references. check-in: 58491e544e user: achavasse tags: trunk
2020-03-07
16:36
More work and fixes on references. Reading a tuple member using the . operator (which returns a constant reference) is now working. check-in: 1c33db7499 user: achavasse tags: trunk
2020-02-29
15:07
Implemented unification for references. check-in: 4940c5c904 user: achavasse tags: trunk
2020-02-27
22:15
Implemented the dot operator for tuples. check-in: 2f953408d9 user: achavasse tags: trunk
2020-02-26
22:48
builtins: added the reference type. check-in: b4dfb8c928 user: achavasse tags: trunk
2020-02-23
23:57
llr: added the load and store instructions. check-in: f34a90f312 user: achavasse tags: trunk
2020-02-22
21:22
llr: added the GEP instruction. check-in: 1f1bc22ffc user: achavasse tags: trunk
2020-02-20
22:44
Minor code formatting cleanup. check-in: 0af3d1c728 user: achavasse tags: trunk
22:42
  • Wrap function parameters into local variables, which will make it easier later on to distinguish temporaries from stack values when implementing references.
  • Register parameters for destruction, which was missing.
  • Added an invocation rule for local variables, so that they can be invoked if they contain an invokable object.
check-in: 652107629a user: achavasse tags: trunk
2020-02-17
23:15
Register temporary values returned from function calls for destruction, so that DestroyValue() is invoked on them. check-in: a0ee0dfc2e user: achavasse tags: trunk
2020-02-15
15:13
Started to implement a virtual memory sub system for compilation time execution. check-in: f18062b8da user: achavasse tags: trunk
2020-02-09
19:23
Small cosmetic error messages fixes. check-in: edf6a9d2ed user: achavasse tags: trunk
19:02
Builtin operators:
  • Verification time assertion failure errors for builtin division, module and shift operators are anchored to a valid source code location.
  • Added custom error messages for the above.
  • Added tests for the above.
check-in: c4a6d4d66b user: achavasse tags: trunk
16:55
  • The builtin integer division and modulo operators now require a compile-time proof that the divider is not zero.
  • The builtin integer left shit and right shift operators now require a compile-time proof that the rhs value is less than the bitsize of lhs.
check-in: 8c4fcc68b0 user: achavasse tags: trunk
2020-02-04
21:42
Builtins: implemented helpers to construct complex computed values using expression templates. check-in: 6ed2bd7a75 user: achavasse tags: trunk
20:20
Unfuck some documentation. check-in: 87f7150020 user: achavasse tags: trunk
2020-02-02
23:13
Docs: small layout improvement. check-in: 0521bfdcdf user: achavasse tags: trunk
23:10
Some documentation cleanup and update. check-in: c9186b7b9f user: achavasse tags: trunk
21:47
Refinement types: implemented tests and fixed some issues. check-in: 972099a359 user: achavasse tags: trunk
2020-02-01
23:28
Refinement types:
  • Assert type predicates after a variable assignment
  • Check type predicates when checking a compile-time function call
check-in: 216ff2d9c8 user: achavasse tags: trunk
22:54
Refinement types: when calling a function, assert the param's predicates and assume the return type's predicates. check-in: d828564e66 user: achavasse tags: trunk
22:32
Refinement types: assert the return type predicates when returning from a function. check-in: 7259273cf9 user: achavasse tags: trunk
2020-01-28
21:52
Refinement types: assume parameter types predicates at the beginning of functions. check-in: 7f16edb82a user: achavasse tags: trunk
2020-01-27
00:24
Refinement types: parse predicates lazily to play well with templates. check-in: e57c63fea5 user: achavasse tags: trunk
2020-01-23
22:24
Refinement types: implemented the where operator to add predicates to a type. check-in: 9586391cdb user: achavasse tags: trunk
2020-01-22
22:14
Standardized the way type values are encoded to make room for an optional pointer to a list of predicates for refinement types. check-in: cc380f4f8f user: achavasse tags: trunk
2020-01-16
21:41
ir: also make void* always compare to true to make it easier to work with llvm type pointers embedded inside type IR expressions. check-in: 6680e30102 user: achavasse tags: trunk
20:46
ir: comparing ptr< void > is considered always true, to allow to more easily attach opaque data onto ir expressions without changing their semantics. check-in: 1a704c5a51 user: achavasse tags: trunk
2020-01-13
23:13
Renamed the runtime struct type to "record" to avoid future confusion since it's a much lower level type (essentially just a tuple restricted to runtime types) than the future "struct" type. check-in: b573d100cf user: achavasse tags: trunk
2020-01-12
21:10
builtins: added wrapper types to allow terms and values to be manipulated at low level within the language itself. check-in: ceb0b190d6 user: achavasse tags: trunk
20:03
builtins: added a wrapper for a CodeBuilder pointer. check-in: d4e5c46e57 user: achavasse tags: trunk
2020-01-11
18:28
  • Moved the cfg and lifetime management stuff into a CodeBuilder object owned by sema::Context. This is in preparation to allow alternative implementations of the builder, for instance to build classes.
  • Pass the context to intrinsic functions, which removes their dependency to the parser the need for the ugly "GetCurrentParser" static function.
check-in: b3aeaae2df user: achavasse tags: trunk
2020-01-05
21:46
Fix (inconsequential) missing else. check-in: 9ad87f2dcf user: achavasse tags: trunk
20:22
  • Split extpoints.cpp into several files.
  • Fixed a tuple related bug that caused compilation failures when adding parentheses around expressions in some cases.
check-in: 5967fcaf06 user: achavasse tags: trunk
17:41
Simplified the implementation of the comma operator. check-in: a25bb3bc5f user: achavasse tags: trunk
2020-01-04
23:44
  • Fixed crash when an undefined symbol is encountered in a verification condition.
  • Fixed crash when a non-boolean expression is encountered in a verification condition.
check-in: f6e12ac41e user: achavasse tags: trunk
18:27
Verification: changed the syntax for the current function's return value to the more explicit "@result". check-in: cbbd282cfa user: achavasse tags: trunk
17:28
Loop verifier: when still finding counter-examples at max K unrolls, emit error messages for the failed conditions instead of a generic "couldn't verify loop" message. check-in: 23d2aa4c8a user: achavasse tags: trunk
15:48
Verifier: tweak the wording of the unsatisfiability error for consistency, also sort those by location ids to have a deterministic output. check-in: 264e55dac8 user: achavasse tags: trunk
15:17
  • verifier: check compilation-time function calls.
  • verifier: improved error messages wording.
check-in: 353fcc252a user: achavasse tags: trunk
2019-12-14
21:24
Verifier: fixed multiple issues with nested loop verification. check-in: 693415ce16 user: achavasse tags: trunk
2019-12-11
15:38
  • Compile-time execution: don't attempt to perform a compile time evaluation of every invocation. Instead, wait until a type is being used by a decl to try and evaluate it.
  • Diagnostics: simplify accordingly (no need for the mode that silences all errors during attempted comptime evaluation)
  • Added some verification conditions to the mandelbrot sample, and created a broken variant as a verification diagnostics test.
check-in: b702561850 user: achavasse tags: trunk
2019-12-05
17:40
Implemented a helper to check whether a type is compile-time only. check-in: 12f37d77cb user: achavasse tags: trunk
2019-12-03
20:34
  • Shift operators: the right hand side must be an unsigned int.
  • Verifier: added tests to check that bitwise operations are properly translated to z3.
check-in: 74b73239c8 user: achavasse tags: trunk
2019-12-01
20:17
Verifier:
  • Fixed incorrect cfg walking order, which sometimes didn't properly process all the predecessors of a basic block first.
  • Preserve the unique id counter of the remapper when saving/restoring its state. Fixes breakage with nested loops.
  • Added tests for the logic or/and operators (which are really tests of the phi operator and of basic block processing order).
check-in: f1e4ac80ba user: achavasse tags: trunk
2019-11-29
12:15
Verifier: handle phi instructions. check-in: b7dd8a4d25 user: achavasse tags: trunk
2019-11-28
17:53
Verifier: implemented most of the missing instructions (unsigned arithmetic and bitwise operations). check-in: 60e143d189 user: achavasse tags: trunk
2019-11-27
20:24
Verifier:
  • Unsigned ints are represented using z3 bitvecs.
  • The original type is carried around along with z3 exprs to be able to convert ints to bitvecs of the right size.
  • Insert int2bv conversions as necessary when encountering integer/bitvec mixed operations.
  • The logic and and logic or instructions are implemented on integers, which are converted to bitvecs.
check-in: 18af6c1847 user: achavasse tags: trunk
2019-11-19
20:49
Store a location in loop headers, and use it to provide more context when diagnosing loop verification failures. check-in: 5f20eec65e user: achavasse tags: trunk
20:20
cfg: fix the way the variable ids modified by each loop are stored to avoid duplicate entries. check-in: 1c3ff200aa user: achavasse tags: trunk
00:04
cfg: now that we got rid of this crazy system where CFGs could "call" other CFGs that weren't really functions, removed that clumsy cfg index that was needed to identify temporaries everywhere. check-in: 238df77134 user: achavasse tags: trunk
2019-11-18
22:42
Removed the "inline CFG" llr instruction and related support code. check-in: 5329f83e33 user: achavasse tags: trunk
22:09
Refactor the logic and/or operator to directly append new basic blocks into the current CFG, rather than using a special llr instruction that embeds a nested CFG, whose implementation creates a lot of complexity everywhere. check-in: 70717f6b76 user: achavasse tags: trunk
01:40
Verifier: first seemingly working version of the k-induction loop checker. check-in: 477ef5b3d4 user: achavasse tags: trunk
2019-11-17
18:20
  • cfg: compute a list of every variable modified by each loop.
  • verifier: added a function to "havoc" a variable at the start of a given basic block.
check-in: 02836c95bc user: achavasse tags: trunk
2019-11-16
16:27
  • while: remove code attempting to detect infinite loops, this will be best left to the verifier.
  • verifier: loop unrolling now works.
check-in: f7c8245cb2 user: achavasse tags: trunk
2019-11-08
11:48
Verifier: check assertions with z3 immediately instead of postponing it until we have built the entire formula for the function. check-in: e33c4ea6c1 user: achavasse tags: trunk
2019-11-04
19:53
Verifier: more work on loop verification. check-in: b4385d9930 user: achavasse tags: trunk
2019-10-30
22:09
Removed an obsolete comment. check-in: 626057ff22 user: achavasse tags: trunk
22:08
Verifier: more work on loop verification. check-in: c91249ffc7 user: achavasse tags: trunk
2019-10-27
21:31
Verifier: split func.cpp into multiple files to make navigation easier. check-in: f606dd6e5d user: achavasse tags: trunk
2019-10-22
22:11
Verifier: traverse basic blocks in breadth first order and make sure that the current block's predecessors are processed first, so that we don't rely anymore on the order in which they are created by the statements. check-in: d7e2fcc24f user: achavasse tags: trunk
2019-10-20
14:13
Verifier: more work on loop unrolling. check-in: 8082ea7f42 user: achavasse tags: trunk
2019-10-18
11:33
Verifier:
  • Removed some hackish code to work around loops (not needed anymore now that loops edges are properly identified)
  • Added a placeholder class to track the state of loop unrolling and started plugging it into the existing code.
check-in: b6662af2e1 user: achavasse tags: trunk
2019-10-16
23:08
llr: detect and store relevant informations about loops in the CFG to be able to unroll them in the verifier. check-in: b1f107d1e7 user: achavasse tags: trunk
2019-10-15
00:04
llr: implemented a helper function to compute dominators. check-in: cfc94e192c user: achavasse tags: trunk
2019-10-12
17:25
Verifier: use z3 push/pop to check assertions one at a time, so that we can find and report multiple errors in the same function. check-in: b414bc18df user: achavasse tags: trunk
2019-10-11
22:24
Docs: add anchors on sub section titles. check-in: 4f4a1dc4aa user: achavasse tags: trunk
2019-10-10
01:00
Docs: typo fix. check-in: d167a0b946 user: achavasse tags: trunk
00:38
Some docs fixes. check-in: e36fbebe18 user: achavasse tags: trunk
00:26
Wrote some docs. check-in: 8f046020b6 user: achavasse tags: trunk
2019-10-09
19:42
Added .editorconfig file. check-in: ed08ba02f2 user: achavasse tags: trunk
19:34
Some more renaming. check-in: f65c08a1c5 user: achavasse tags: trunk
19:21
Some renaming for consistency and to match commonly used names for those things. check-in: 5e72e8e08c user: achavasse tags: trunk
2019-10-08
21:55
  • Verifier: handle calls (assert the callee's preconditions and assume its postconditions)
  • Verifier: handle return value placeholder in the post conditions.
  • Verifier: fixes.
  • Verifier: context descriptions and locations can be attached to assertions.
  • Lexer: fix incorrect location length on integer literals.
  • Added some tests for successful and failed verification of functions pre-conditions and post-conditions.
check-in: 09e8221436 user: achavasse tags: trunk
18:17
Expose "@" as a placeholder for the function's return value inside of ensures statements. check-in: 8541259c1c user: achavasse tags: trunk
18:02
Added the "placeholder" llr pseudo instruction. check-in: cc9ce06e64 user: achavasse tags: trunk
2019-10-07
22:04
Made the "assertion failure" error message lowercase to be consistent with other error messages. check-in: acbb4b30b8 user: achavasse tags: trunk
21:58
  • Fixed incorrect logic when generating z3 expressions to track the value of variables accross basic blocks.
  • Implemented basic error reporting for verification failure that highlights all the failed assertions.
  • Added a test program that demonstrates a simple case of failed static verification.
check-in: 717a1ea6d4 user: achavasse tags: trunk
2019-10-05
16:37
  • Renamed the "assert" test helper function to "check".
  • Implemented a builtin "assert" intrinsic that emits an Assert instruction for the verifier.
  • Implemented a couple of tests to verify the generated z3 expressions for a couple of simple functions.
  • Fixed a few issues when building the z3 expressions.
check-in: 3740e7a491 user: achavasse tags: trunk
14:50
verification: implemented a trace mode that only dumps the z3 expressions. check-in: 0b95fe304a user: achavasse tags: trunk
13:58
Implemented the conversion of GetVar/SetVar/GetTemporary/SetTemporary to z3 expressions. check-in: 3ae3c0b3ad user: achavasse tags: trunk
11:55
z3 builder: handle variables. check-in: 83476a562e user: achavasse tags: trunk
2019-10-03
20:01
Removed an obsolete TODO. check-in: 251bfddf8b user: achavasse tags: trunk
19:58
FuncValidator: model the execution flow in z3 by generating boolean expressions describing when each basic block is executed. check-in: 6c8e8075ff user: achavasse tags: trunk
2019-10-02
22:15
Typo fix. check-in: 57129c3f9a user: achavasse tags: trunk
22:11
z3 builder: instead of directly adding negated assertions to the solver, gather them into a conjunction and add that. check-in: 2734029a31 user: achavasse tags: trunk
20:09
FuncValidator: more work on the implementation. check-in: 98a85945f6 user: achavasse tags: trunk
19:30
Implemented a helper class allowing to wrap each z3 expression with a predicate indicating that the execution flow went through a certain basic block. check-in: 1d340c945f user: achavasse tags: trunk
2019-09-30
21:50
Began the implementation of the function verifier. check-in: a0c53b4adb user: achavasse tags: trunk
2019-09-29
23:11
repo: don't attempt to perform syntax highlighting on text files. check-in: be610f458b user: achavasse tags: trunk
22:30
  • Fixed some issues with implicit termination of void functions.
  • llr: give an index to each basic block, and keep track of back links towards previous blocks.
check-in: 4ae6912760 user: achavasse tags: trunk
20:30
Added a specific llr instruction for 'not' for the sake of constructing z3 expressions. check-in: 2628782ef2 user: achavasse tags: trunk
2019-09-26
23:37
Refactored the parsing of verification statements so that it works properly in all cases (regular functions, template functions, function type expressions, lambdas). check-in: 4fe418f4d0 user: achavasse tags: trunk
00:27
Static analysis: check that function verification statements are satisfiable and emit relevant error messages if they aren't. check-in: 7f14d60722 user: achavasse tags: trunk
2019-09-25
19:16
Implemented a first batch of llr instruction to z3 expression conversions. check-in: b6b76a4e03 user: achavasse tags: trunk
2019-09-24
22:06
Began writing the static analyzer. check-in: d960d10be9 user: achavasse tags: trunk
19:52
Fix wrong file deletion. check-in: 103523bfe9 user: achavasse tags: trunk
19:50
Updated repo's syntax highlighting theme. check-in: 2aafe4e645 user: achavasse tags: trunk
19:13
Updated repo's syntax highlighting. check-in: af5df97f63 user: achavasse tags: trunk
2019-09-23
21:35
build: find the z3 library. check-in: b3c85287b1 user: achavasse tags: trunk
21:00
verification stmts: append to the assertion lists, instead of overwriting them. check-in: db3875c530 user: achavasse tags: trunk
2019-09-22
22:42
Implemented overloads of boolean or/and operators for verification expressions that don't do shortcut evaluation but simply emit the corresponding llr instruction. check-in: 7dcd0447a3 user: achavasse tags: trunk
14:37
Project renaming. check-in: af650a9e95 user: achavasse tags: trunk