Goose  Diff

Differences From Artifact [652a11249b]:

  • File bs/verify/storage.h — part of check-in [7d2def7b75] at 2020-12-27 14:40:24 on branch trunk — Renamed "ir" to "eir" (expression intermediate representation) and "llr" to "cir" (code intermediate representation) for clarity. (user: achavasse size: 929)

To Artifact [8784ebcccf]:

  • File bs/verify/storage.h — part of check-in [26c691ecb9] at 2021-01-02 18:24:23 on branch trunk — 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. (user: achavasse size: 1046)

1
2
3
4
5
6
7
8
9

10

11
12
13
14
15
16
17
18
19
#ifndef GOOSE_VERIFY_STORAGE_H
#define GOOSE_VERIFY_STORAGE_H

namespace goose::verify
{
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::CalcAddress& addr );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const BaseAddress& baseAddr );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::TemporaryBaseAddr& ta );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::VarBaseAddr& va );



    extern void StoreToAddress( Builder& b, const cir::CalcAddress& addr, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const BaseAddress& baseAddr, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::TemporaryBaseAddr& ta, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::VarBaseAddr& va, Z3Val&& val );

    extern void HavocAddress( Builder& b, uint32_t bbIndex, const Term& type, const cir::CalcAddress& addr );
}

#endif





|
|
|
|
>

>
|
|
|
|

|



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef GOOSE_VERIFY_STORAGE_H
#define GOOSE_VERIFY_STORAGE_H

namespace goose::verify
{
    extern optional< Z3Val > LoadFromAddress( Builder& b, const Value& addr );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::Instruction& addr );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::VarAddr& va );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::TempAddr& ta );
    extern optional< Z3Val > LoadFromAddress( Builder& b, const cir::Select& s );

    extern void StoreToAddress( Builder& b, const Value& addr, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::Instruction& addr, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::VarAddr& va, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::TempAddr& ta, Z3Val&& val );
    extern void StoreToAddress( Builder& b, const cir::Select& s, Z3Val&& val );

    extern void HavocAddress( Builder& b, uint32_t bbIndex, const Term& type, const cir::Instruction& addr );
}

#endif