File tree Expand file tree Collapse file tree 6 files changed +47
-5
lines changed
regression/cbmc/String_Literal1 Expand file tree Collapse file tree 6 files changed +47
-5
lines changed Original file line number Diff line number Diff line change @@ -52,4 +52,6 @@ int main()
52
52
53
53
// generic wide string, OS-dependent
54
54
assert (sizeof (L"" [0 ])== sizeof (wchar_t ));
55
+
56
+ assert (0 );
55
57
}
Original file line number Diff line number Diff line change 1
1
CORE
2
2
main.c
3
-
4
- ^EXIT=0$
3
+ --trace
4
+ ^State \d+ file main.c function main line 20 thread 0$
5
+ ^State \d+ file main.c function main line 36 thread 0$
6
+ ^State \d+ file main.c function main line 44 thread 0$
7
+ ^\*\* 1 of \d+ failed \(\d+ iterations\)$
8
+ ^VERIFICATION FAILED$
9
+ ^EXIT=10$
5
10
^SIGNAL=0$
6
- ^VERIFICATION SUCCESSFUL$
7
11
--
8
12
^warning: ignoring
13
+ ^State \d+ (function main )?thread 0$
14
+ --
15
+ Each step in the trace must have a full source location, including line numbers.
Original file line number Diff line number Diff line change @@ -98,6 +98,30 @@ class exprt:public irept
98
98
const operandst &operands () const
99
99
{ return (const operandst &)get_sub (); }
100
100
101
+ // / Add the source location from \p other, if it has any.
102
+ template <typename T>
103
+ T &with_source_location (const exprt &other) &
104
+ {
105
+ static_assert (
106
+ std::is_base_of<exprt, T>::value,
107
+ " The template argument T must be derived from exprt." );
108
+ if (other.source_location ().is_not_nil ())
109
+ add_source_location () = other.source_location ();
110
+ return *static_cast <T *>(this );
111
+ }
112
+
113
+ // / Add the source location from \p other, if it has any.
114
+ template <typename T>
115
+ T &&with_source_location(const exprt &other) &&
116
+ {
117
+ static_assert (
118
+ std::is_base_of<exprt, T>::value,
119
+ " The template argument T must be derived from exprt." );
120
+ if (other.source_location ().is_not_nil ())
121
+ add_source_location () = other.source_location ();
122
+ return std::move (*static_cast <T *>(this ));
123
+ }
124
+
101
125
protected:
102
126
exprt &op0 ()
103
127
{ return operands ().front (); }
Original file line number Diff line number Diff line change @@ -1571,6 +1571,16 @@ class array_exprt : public multi_ary_exprt
1571
1571
{
1572
1572
return static_cast <array_typet &>(multi_ary_exprt::type ());
1573
1573
}
1574
+
1575
+ array_exprt &with_source_location (const exprt &other) &
1576
+ {
1577
+ return exprt::with_source_location<array_exprt>(other);
1578
+ }
1579
+
1580
+ array_exprt &&with_source_location(const exprt &other) &&
1581
+ {
1582
+ return std::move (*this ).exprt ::with_source_location<array_exprt>(other);
1583
+ }
1574
1584
};
1575
1585
1576
1586
template <>
Original file line number Diff line number Diff line change @@ -53,5 +53,5 @@ array_exprt string_constantt::to_array_expr() const
53
53
*it = from_integer (ch, char_type);
54
54
}
55
55
56
- return dest;
56
+ return std::move ( dest). with_source_location (* this ) ;
57
57
}
Original file line number Diff line number Diff line change @@ -24,7 +24,6 @@ class string_constantt : public nullary_exprt
24
24
}
25
25
26
26
array_exprt to_array_expr () const ;
27
- bool from_array_expr (const array_exprt &);
28
27
};
29
28
30
29
template <>
You can’t perform that action at this time.
0 commit comments