Merge remote-tracking branch 'upstream/main' into mathiasvp/replace-ast-with-ir-use-usedataflow

This commit is contained in:
Jeroen Ketema
2022-11-10 12:09:10 +01:00
100 changed files with 4212 additions and 756 deletions

View File

@@ -54,22 +54,22 @@ void test1()
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%s", string::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, string::source(), "Hello."));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%s %s %s", "a", "b", string::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%.*s", 10, string::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
@@ -80,39 +80,39 @@ void test1()
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%i", source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%.*s", source(), "Hello."));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(snprintf(buffer, 256, "%p", string::source()));
sink(buffer); // $ ast MISSING: ir // tainted (debatable)
sink(buffer); // $ ast,ir // tainted (debatable)
}
{
char buffer[256] = {0};
sink(sprintf(buffer, "%s", string::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(sprintf(buffer, "%ls", wstring::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
wchar_t wbuffer[256] = {0};
sink(swprintf(wbuffer, 256, L"%s", wstring::source()));
sink(wbuffer); // $ ast MISSING: ir
sink(wbuffer); // $ ast,ir
}
{
char buffer[256] = {0};
sink(mysprintf(buffer, 256, "%s", string::source()));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
{
@@ -133,7 +133,7 @@ void test1()
{
char buffer[256] = {0};
sink(sscanf(string::source(), "%s", &buffer));
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
}

View File

@@ -10,7 +10,7 @@ template<typename T> void sink(std::unique_ptr<T>&);
void test_make_shared() {
std::shared_ptr<int> p = std::make_shared<int>(source());
sink(*p); // $ ast,ir
sink(p); // $ ast MISSING: ir
sink(p); // $ ast,ir
}
void test_make_shared_array() {
@@ -22,7 +22,7 @@ void test_make_shared_array() {
void test_make_unique() {
std::unique_ptr<int> p = std::make_unique<int>(source());
sink(*p); // $ ast,ir
sink(p); // $ ast MISSING: ir
sink(p); // $ ast,ir
}
void test_make_unique_array() {

View File

@@ -28,7 +28,7 @@ void test_string()
sink(a); // $ ast,ir
sink(b);
sink(c); // $ ast MISSING: ir
sink(c); // $ ast,ir
sink(b.c_str());
sink(c.c_str()); // $ ast,ir
}
@@ -54,7 +54,7 @@ void test_string3()
std::string ss(cs);
sink(cs); // $ ast,ir
sink(ss); // $ ast MISSING: ir
sink(ss); // $ ast,ir
}
void test_string4()
@@ -68,7 +68,7 @@ void test_string4()
cs = ss.c_str();
sink(cs); // $ ast,ir
sink(ss); // $ ast MISSING: ir
sink(ss); // $ ast,ir
}
void test_string_constructors_assignments()
@@ -90,9 +90,9 @@ void test_string_constructors_assignments()
std::string s3;
s3 = source();
sink(s1); // $ ast MISSING: ir
sink(s2); // $ ast MISSING: ir
sink(s3); // $ ast MISSING: ir
sink(s1); // $ ast,ir
sink(s2); // $ ast,ir
sink(s3); // $ ast,ir
}
{
@@ -111,8 +111,8 @@ void test_string_constructors_assignments()
std::string s2;
s2 = std::string(source());
sink(s1); // $ ast MISSING: ir
sink(s2); // $ ast MISSING: ir
sink(s1); // $ ast,ir
sink(s2); // $ ast,ir
}
}
@@ -156,25 +156,25 @@ void test_string_append() {
std::string s5, s6, s7, s8, s9;
s5 = s3 + s4;
sink(s5); // $ ast MISSING: ir
sink(s5); // $ ast,ir
s6 = s3;
sink(s6 += s4); // $ ast MISSING: ir
sink(s6); // $ ast MISSING: ir
sink(s6 += s4); // $ ast,ir
sink(s6); // $ ast,ir
s7 = s3;
sink(s7 += source()); // $ ast,ir
sink(s7 += " "); // $ ast MISSING: ir
sink(s7); // $ ast MISSING: ir
sink(s7 += " "); // $ ast,ir
sink(s7); // $ ast,ir
s8 = s3;
s8.append(s4);
sink(s8); // $ ast MISSING: ir
sink(s8); // $ ast,ir
s9 = s3;
s9.append(source());
s9.append(" ");
sink(s9); // $ ast MISSING: ir
sink(s9); // $ ast,ir
}
{
@@ -182,7 +182,7 @@ void test_string_append() {
char c = ns_char::source();
s10.append(1, c);
sink(s10); // $ ast MISSING: ir
sink(s10); // $ ast,ir
}
}
@@ -196,14 +196,14 @@ void test_string_assign() {
sink(s3.assign(s1));
sink(s3);
sink(s4.assign(s2)); // $ ast MISSING: ir
sink(s4); // $ ast MISSING: ir
sink(s4.assign(s2)); // $ ast,ir
sink(s4); // $ ast,ir
sink(s5.assign(10, c)); // $ ast MISSING: ir
sink(s5); // $ ast MISSING: ir
sink(s5.assign(10, c)); // $ ast,ir
sink(s5); // $ ast,ir
sink(s6.assign(s1));
sink(s6); // $ SPURIOUS: ast
sink(s6); // $ SPURIOUS: ast,ir
}
void test_string_insert() {
@@ -217,16 +217,16 @@ void test_string_insert() {
sink(s3);
s4 = s2;
sink(s4.insert(0, s1)); // $ ast MISSING: ir
sink(s4); // $ ast MISSING: ir
sink(s4.insert(0, s1)); // $ ast,ir
sink(s4); // $ ast,ir
s5 = s1;
sink(s5.insert(0, s2)); // $ ast MISSING: ir
sink(s5); // $ ast MISSING: ir
sink(s5.insert(0, s2)); // $ ast,ir
sink(s5); // $ ast,ir
s6 = s1;
sink(s6.insert(0, 10, c)); // $ ast MISSING: ir
sink(s6); // $ ast MISSING: ir
sink(s6.insert(0, 10, c)); // $ ast,ir
sink(s6); // $ ast,ir
}
void test_string_replace() {
@@ -240,16 +240,16 @@ void test_string_replace() {
sink(s3);
s4 = s2;
sink(s4.replace(1, 2, s1)); // $ ast MISSING: ir
sink(s4); // $ ast MISSING: ir
sink(s4.replace(1, 2, s1)); // $ ast,ir
sink(s4); // $ ast,ir
s5 = s1;
sink(s5.replace(1, 2, s2)); // $ ast MISSING: ir
sink(s5); // $ ast MISSING: ir
sink(s5.replace(1, 2, s2)); // $ ast,ir
sink(s5); // $ ast,ir
s6 = s1;
sink(s6.replace(1, 2, 10, c)); // $ ast MISSING: ir
sink(s6); // $ ast MISSING: ir
sink(s6.replace(1, 2, 10, c)); // $ ast,ir
sink(s6); // $ ast,ir
}
void test_string_copy() {
@@ -262,7 +262,7 @@ void test_string_copy() {
sink(b1);
s2.copy(b2, s1.length(), 0);
sink(b2); // $ ast MISSING: ir
sink(b2); // $ ast,ir
}
void test_string_swap() {
@@ -272,17 +272,17 @@ void test_string_swap() {
std::string s4(source());
sink(s1);
sink(s2); // $ ast MISSING: ir
sink(s2); // $ ast,ir
sink(s3);
sink(s4); // $ ast MISSING: ir
sink(s4); // $ ast,ir
s1.swap(s2);
s4.swap(s3);
sink(s1); // $ ast MISSING: ir
sink(s2); // $ SPURIOUS: ast
sink(s3); // $ ast MISSING: ir
sink(s4); // $ SPURIOUS: ast
sink(s1); // $ ast,ir
sink(s2); // $ SPURIOUS: ast,ir
sink(s3); // $ ast,ir
sink(s4); // $ SPURIOUS: ast,ir
}
void test_string_clear() {
@@ -290,17 +290,17 @@ void test_string_clear() {
std::string s2(source());
std::string s3(source());
sink(s1); // $ ast MISSING: ir
sink(s2); // $ ast MISSING: ir
sink(s3); // $ ast MISSING: ir
sink(s1); // $ ast,ir
sink(s2); // $ ast,ir
sink(s3); // $ ast,ir
s1.clear();
s2 = "";
s3 = s3;
sink(s1); // $ SPURIOUS: ast
sink(s1); // $ SPURIOUS: ast,ir
sink(s2);
sink(s3); // $ ast MISSING: ir
sink(s3); // $ ast,ir
}
void test_string_data()
@@ -309,7 +309,7 @@ void test_string_data()
std::string b(source());
sink(a.data());
sink(b.data()); // $ ast MISSING: ir
sink(b.data()); // $ ast,ir
sink(a.length());
sink(b.length());
}
@@ -337,9 +337,9 @@ void test_string_at()
b.at(0) = ns_char::source();
c[0] = a[0];
sink(a); // $ ast MISSING: ir
sink(b); // $ ast MISSING: ir
sink(c); // $ ast MISSING: ir
sink(a); // $ ast,ir
sink(b); // $ ast,ir
sink(c); // $ ast,ir
}
void test_string_data_more()
@@ -347,8 +347,8 @@ void test_string_data_more()
std::string str("123");
str.data()[1] = ns_char::source();
sink(str); // $ ast MISSING: ir
sink(str.data()); // $ ast MISSING: ir
sink(str); // $ ast,ir
sink(str.data()); // $ ast,ir
}
void test_string_iterators() {
@@ -360,8 +360,8 @@ void test_string_iterators() {
std::string s4("world");
sink(s1);
sink(s1.append(s2.begin(), s2.end())); // $ ast MISSING: ir
sink(s1); // $ ast MISSING: ir
sink(s1.append(s2.begin(), s2.end())); // $ ast,ir
sink(s1); // $ ast,ir
sink(s3);
sink(s3.append(s4.begin(), s4.end()));
@@ -433,8 +433,8 @@ void test_string_insert_more()
sink(s1.insert(0, cs1));
sink(s1);
sink(s2.insert(0, cs2)); // $ ast MISSING: ir
sink(s2); // $ ast MISSING: ir
sink(s2.insert(0, cs2)); // $ ast,ir
sink(s2); // $ ast,ir
}
void test_string_iterator_methods()
@@ -447,7 +447,7 @@ void test_string_iterator_methods()
sink(a);
sink(b.insert(b.begin(), 10, ns_char::source())); // $ ast MISSING: ir
sink(b); // $ ast MISSING: ir
sink(b); // $ ast,ir
}
{
@@ -460,10 +460,10 @@ void test_string_iterator_methods()
sink(c);
sink(d.insert(d.end(), s2.begin(), s2.end())); // $ ast MISSING: ir
sink(d); // $ ast MISSING: ir
sink(d); // $ ast,ir
sink(s2.insert(s2.end(), s1.begin(), s1.end())); // $ ast MISSING: ir
sink(s2); // $ ast MISSING: ir
sink(s2); // $ ast,ir
}
{
@@ -475,11 +475,11 @@ void test_string_iterator_methods()
sink(e.append(s3.begin(), s3.end()));
sink(e);
sink(f.append(s4.begin(), s4.end())); // $ ast MISSING: ir
sink(f); // $ ast MISSING: ir
sink(f.append(s4.begin(), s4.end())); // $ ast,ir
sink(f); // $ ast,ir
sink(s4.append(s3.begin(), s3.end())); // $ ast MISSING: ir
sink(s4); // $ ast MISSING: ir
sink(s4.append(s3.begin(), s3.end())); // $ ast,ir
sink(s4); // $ ast,ir
}
{
@@ -491,11 +491,11 @@ void test_string_iterator_methods()
sink(g.assign(s5.cbegin(), s5.cend()));
sink(g);
sink(h.assign(s6.cbegin(), s6.cend())); // $ ast MISSING: ir
sink(h); // $ ast MISSING: ir
sink(h.assign(s6.cbegin(), s6.cend())); // $ ast,ir
sink(h); // $ ast,ir
sink(s6.assign(s5.cbegin(), s5.cend()));
sink(s6); // $ SPURIOUS: ast
sink(s6); // $ SPURIOUS: ast,ir
}
}
@@ -508,9 +508,9 @@ void test_string_constructors_more() {
std::string s4(s2.begin(), s2.end());
sink(s1);
sink(s2); // $ ast MISSING: ir
sink(s2); // $ ast,ir
sink(s3);
sink(s4); // $ ast MISSING: ir
sink(s4); // $ ast,ir
}
void test_string_front_back() {
@@ -533,15 +533,15 @@ void test_string_return_assign() {
std::string f("ff");
sink( a += (b += "bb") );
sink( c += (d += source()) ); // $ ast MISSING: ir
sink( c += (d += source()) ); // $ ast,ir
sink( (e += "ee") += source() ); // $ ast,ir
sink( (f += source()) += "ff" ); // $ ast MISSING: ir
sink( (f += source()) += "ff" ); // $ ast,ir
sink(a);
sink(b);
sink(c); // $ ast MISSING: ir
sink(d); // $ ast MISSING: ir
sink(e); // $ ast MISSING: ir
sink(f); // $ ast MISSING: ir
sink(c); // $ ast,ir
sink(d); // $ ast,ir
sink(e); // $ ast,ir
sink(f); // $ ast,ir
}
{
@@ -553,14 +553,14 @@ void test_string_return_assign() {
std::string f("ff");
sink( a.assign(b.assign("bb")) );
sink( c.assign(d.assign(source())) ); // $ ast MISSING: ir
sink( e.assign("ee").assign(source()) ); // $ ast MISSING: ir
sink( c.assign(d.assign(source())) ); // $ ast,ir
sink( e.assign("ee").assign(source()) ); // $ ast,ir
sink( f.assign(source()).assign("ff") );
sink(a);
sink(b);
sink(c); // $ ast MISSING: ir
sink(d); // $ ast MISSING: ir
sink(e); // $ ast MISSING: ir
sink(f); // $ SPURIOUS: ast
sink(c); // $ ast,ir
sink(d); // $ ast,ir
sink(e); // $ ast,ir
sink(f); // $ SPURIOUS: ast,ir
}
}

View File

@@ -35,10 +35,10 @@ void test_stringstream_string(int amount)
sink(ss5 << t); // $ ast,ir
sink(ss1);
sink(ss2); // $ ast MISSING: ir
sink(ss3); // $ ast MISSING: ir
sink(ss4); // $ ast MISSING: ir
sink(ss5); // $ ast MISSING: ir
sink(ss2); // $ ast,ir
sink(ss3); // $ ast,ir
sink(ss4); // $ ast,ir
sink(ss5); // $ ast,ir
sink(ss1.str());
sink(ss2.str()); // $ ast,ir
sink(ss3.str()); // $ ast,ir
@@ -49,22 +49,22 @@ void test_stringstream_string(int amount)
ss6.str(source()); // (overwrites)
ss7.str(source());
ss7.str("abc"); // (overwrites)
sink(ss6); // $ ast MISSING: ir
sink(ss7); // $ SPURIOUS: ast
sink(ss6); // $ ast,ir
sink(ss7); // $ SPURIOUS: ast,ir
sink(ss8.put('a'));
sink(ss9.put(ns_char::source())); // $ ast MISSING: ir
sink(ss9.put(ns_char::source())); // $ ast,ir
sink(ss10.put('a').put(ns_char::source()).put('z')); // $ ast,ir
sink(ss8);
sink(ss9); // $ ast MISSING: ir
sink(ss10); // $ ast MISSING: ir
sink(ss9); // $ ast,ir
sink(ss10); // $ ast,ir
sink(ss11.write("begin", 5));
sink(ss12.write(source(), 5)); // $ ast MISSING: ir
sink(ss12.write(source(), 5)); // $ ast,ir
sink(ss13.write("begin", 5).write(source(), amount).write("end", 3)); // $ ast,ir
sink(ss11);
sink(ss12); // $ ast MISSING: ir
sink(ss13); // $ ast MISSING: ir
sink(ss12); // $ ast,ir
sink(ss13); // $ ast,ir
}
void test_stringstream_int(int source)
@@ -73,12 +73,12 @@ void test_stringstream_int(int source)
int v1 = 0, v2 = 0;
sink(ss1 << 1234);
sink(ss2 << source); // $ ast MISSING: ir
sink(ss2 << source); // $ ast,ir
sink(ss1 >> v1);
sink(ss2 >> v2); // $ ast,ir
sink(ss1);
sink(ss2); // $ ast MISSING: ir
sink(ss2); // $ ast,ir
sink(ss1.str());
sink(ss2.str()); // $ ast,ir
sink(v1);
@@ -97,14 +97,14 @@ void test_stringstream_constructors()
std::stringstream ss6;
sink(ss5 = std::stringstream("abc"));
sink(ss6 = std::stringstream(source())); // $ ast MISSING: ir
sink(ss6 = std::stringstream(source())); // $ ast,ir
sink(ss1);
sink(ss2); // $ ast MISSING: ir
sink(ss2); // $ ast,ir
sink(ss3);
sink(ss4); // $ ast MISSING: ir
sink(ss4); // $ ast,ir
sink(ss5);
sink(ss6); // $ ast MISSING: ir
sink(ss6); // $ ast,ir
}
void test_stringstream_swap()
@@ -117,10 +117,10 @@ void test_stringstream_swap()
ss1.swap(ss2);
ss4.swap(ss3);
sink(ss1); // $ ast MISSING: ir
sink(ss2); // $ SPURIOUS: ast
sink(ss3); // $ ast MISSING: ir
sink(ss4); // $ SPURIOUS: ast
sink(ss1); // $ ast,ir
sink(ss2); // $ SPURIOUS: ast,ir
sink(ss3); // $ ast,ir
sink(ss4); // $ SPURIOUS: ast,ir
}
void test_stringstream_in()
@@ -146,9 +146,9 @@ void test_stringstream_in()
sink(ss2 >> s2); // $ ast,ir
sink(ss2 >> s3 >> s4); // $ ast,ir
sink(s1);
sink(s2); // $ ast MISSING: ir
sink(s3); // $ ast MISSING: ir
sink(s4); // $ ast MISSING: ir
sink(s2); // $ ast,ir
sink(s3); // $ ast,ir
sink(s4); // $ ast,ir
sink(ss1 >> b1);
sink(ss2 >> b2); // $ ast,ir
@@ -193,7 +193,7 @@ void test_stringstream_putback()
sink(ss.get());
sink(ss.putback('b'));
sink(ss.get());
sink(ss.putback(ns_char::source())); // $ ast MISSING: ir
sink(ss.putback(ns_char::source())); // $ ast,ir
sink(ss.get()); // $ ast,ir
}
@@ -236,20 +236,20 @@ void test_getline()
sink(getline(ss2, s3)); // $ ast,ir
sink(getline(ss1, s3));
sink(s1);
sink(s2); // $ ast MISSING: ir
sink(s3); // $ SPURIOUS: ast
sink(s2); // $ ast,ir
sink(s3); // $ SPURIOUS: ast,ir
sink(getline(ss1, s4, ' '));
sink(getline(ss2, s5, ' ')); // $ ast,ir
sink(getline(ss2, s6, ' ')); // $ ast,ir
sink(getline(ss1, s6, ' '));
sink(s4);
sink(s5); // $ ast MISSING: ir
sink(s6); // $ SPURIOUS: ast
sink(s5); // $ ast,ir
sink(s6); // $ SPURIOUS: ast,ir
sink(getline(getline(ss2, s7), s8)); // $ ast,ir
sink(s7); // $ ast MISSING: ir
sink(s8); // $ ast MISSING: ir
sink(s7); // $ ast,ir
sink(s8); // $ ast,ir
}
void test_chaining()
@@ -264,5 +264,5 @@ void test_chaining()
sink(b2); // $ ast,ir
sink(ss2.write("abc", 3).flush().write(source(), 3).flush().write("xyz", 3)); // $ ast,ir
sink(ss2); // $ ast MISSING: ir
sink(ss2); // $ ast,ir
}

View File

@@ -170,7 +170,7 @@ namespace strings
strcpy(buffer, "Hello, ");
sink(buffer);
strcat(buffer, tainted);
sink(buffer); // $ ast MISSING: ir
sink(buffer); // $ ast,ir
}
}
@@ -550,7 +550,7 @@ void *memccpy(void *dest, const void *src, int c, size_t n);
void test_memccpy(int *source) {
int dest[16];
memccpy(dest, source, 42, sizeof(dest));
sink(dest); // $ ast=550:24 MISSING: ir SPURIOUS: ast=551:6
sink(dest); // $ ast=550:24 ir SPURIOUS: ast=551:6
}
// --- strcat and related functions ---

View File

@@ -95,16 +95,7 @@ module IRTest {
override predicate isSink(DataFlow::Node sink) {
exists(FunctionCall call |
call.getTarget().getName() = "sink" and
sink.asConvertedExpr() = call.getAnArgument()
or
call.getTarget().getName() = "sink" and
sink.asExpr() = call.getAnArgument() and
sink.asConvertedExpr() instanceof ReferenceDereferenceExpr
)
or
exists(ReadSideEffectInstruction read |
read.getSideEffectOperand() = sink.asOperand() and
read.getPrimaryInstruction().(CallInstruction).getStaticCallTarget().hasName("sink")
sink.asExpr() = call.getAnArgument()
)
}

View File

@@ -49,30 +49,30 @@ void test_element_taint(int x) {
sink(v1.back());
v2[0] = source();
sink(v2); // $ ast MISSING: ir
sink(v2); // $ ast,ir
sink(v2[0]); // $ ast,ir
sink(v2[1]); // $ SPURIOUS: ast,ir
sink(v2[x]); // $ ast,ir
v3 = v2;
sink(v3); // $ ast MISSING: ir
sink(v3); // $ ast,ir
sink(v3[0]); // $ ast,ir
sink(v3[1]); // $ SPURIOUS: ast,ir
sink(v3[x]); // $ ast,ir
v4[x] = source();
sink(v4); // $ ast MISSING: ir
sink(v4); // $ ast,ir
sink(v4[0]); // $ ast,ir
sink(v4[1]); // $ ast,ir
sink(v4[x]); // $ ast,ir
v5.push_back(source());
sink(v5); // $ ast MISSING: ir
sink(v5); // $ ast,ir
sink(v5.front()); // $ SPURIOUS: ast,ir
sink(v5.back()); // $ ast,ir
v6.data()[2] = source();
sink(v6); // $ ast MISSING: ir
sink(v6); // $ ast,ir
sink(v6.data()[2]); // $ ast,ir
@@ -80,7 +80,7 @@ void test_element_taint(int x) {
std::vector<int>::const_iterator it = v7.begin();
v7.insert(it, source());
}
sink(v7); // $ ast MISSING: ir
sink(v7); // $ ast,ir
sink(v7.front()); // $ ast,ir
sink(v7.back()); // $ SPURIOUS: ast,ir
@@ -94,7 +94,7 @@ void test_element_taint(int x) {
sink(v8.back()); // $ MISSING: ast,ir
v9.at(x) = source();
sink(v9); // $ ast MISSING: ir
sink(v9); // $ ast,ir
sink(v9.at(0)); // $ ast,ir
sink(v9.at(1)); // $ ast,ir
sink(v9.at(x)); // $ ast,ir
@@ -106,18 +106,18 @@ void test_vector_swap() {
v1.push_back(source());
v4.push_back(source());
sink(v1); // $ ast MISSING: ir
sink(v1); // $ ast,ir
sink(v2);
sink(v3);
sink(v4); // $ ast MISSING: ir
sink(v4); // $ ast,ir
v1.swap(v2);
v3.swap(v4);
sink(v1); // $ SPURIOUS: ast
sink(v2); // $ ast MISSING: ir
sink(v3); // $ ast MISSING: ir
sink(v4); // $ SPURIOUS: ast
sink(v1); // $ SPURIOUS: ast,ir
sink(v2); // $ ast,ir
sink(v3); // $ ast,ir
sink(v4); // $ SPURIOUS: ast,ir
}
void test_vector_clear() {
@@ -127,18 +127,18 @@ void test_vector_clear() {
v2.push_back(source());
v3.push_back(source());
sink(v1); // $ ast MISSING: ir
sink(v2); // $ ast MISSING: ir
sink(v3); // $ ast MISSING: ir
sink(v1); // $ ast,ir
sink(v2); // $ ast,ir
sink(v3); // $ ast,ir
sink(v4);
v1.clear();
v2 = v2;
v3 = v4;
sink(v1); // $ SPURIOUS: ast
sink(v2); // $ ast MISSING: ir
sink(v3); // $ ast MISSING: ir
sink(v1); // $ SPURIOUS: ast,ir
sink(v2); // $ ast,ir
sink(v3); // $ ast,ir
sink(v4);
}
@@ -239,8 +239,8 @@ void test_vector_assign() {
v3.push_back(source());
sink(v1);
sink(v2); // $ ast MISSING: ir
sink(v3); // $ ast MISSING: ir
sink(v2); // $ ast,ir
sink(v3); // $ ast,ir
{
std::vector<int> v4, v5, v6;
@@ -255,10 +255,10 @@ void test_vector_assign() {
v6.assign(i1, i2);
sink(v4);
sink(v5); // $ ast MISSING: ir
sink(i1); // $ ast MISSING: ir
sink(i2); // $ ast MISSING: ir
sink(v6); // $ ast MISSING: ir
sink(v5); // $ ast,ir
sink(i1); // $ ast,ir
sink(i2); // $ ast,ir
sink(v6); // $ ast,ir
}
{
@@ -270,9 +270,9 @@ void test_vector_assign() {
v8.assign(100, ns_myFloat::source());
v9.assign(100, ns_ci_ptr::source());
sink(v7); // $ ast MISSING: ir
sink(v8); // $ ast MISSING: ir
sink(v9); // $ ast MISSING: ir
sink(v7); // $ ast,ir
sink(v8); // $ ast,ir
sink(v9); // $ ast,ir
}
}
@@ -282,12 +282,12 @@ void test_data_more() {
std::vector<int> v1, v2;
v1.push_back(source());
sink(v1); // $ ast MISSING: ir
sink(v1); // $ ast,ir
sink(v1.data()); // $ ast,ir
sink(v1.data()[2]); // $ ast,ir
*(v2.data()) = ns_int::source();
sink(v2); // $ ast MISSING: ir
sink(v2); // $ ast,ir
sink(v2.data()); // $ ast,ir
sink(v2.data()[2]); // $ ast,ir
}
@@ -306,10 +306,10 @@ void test_vector_insert() {
sink(a);
sink(c.insert(c.end(), d.begin(), d.end())); // $ ast,ir
sink(c); // $ ast MISSING: ir
sink(c); // $ ast,ir
sink(d.insert(d.end(), a.begin(), a.end())); // $ ast,ir
sink(d); // $ ast MISSING: ir
sink(d); // $ ast,ir
}
void test_vector_constructors_more() {
@@ -321,9 +321,9 @@ void test_vector_constructors_more() {
std::vector<int> v4(v2.begin(), v2.end());
sink(v1);
sink(v2); // $ ast MISSING: ir
sink(v2); // $ ast,ir
sink(v3);
sink(v4); // $ ast MISSING: ir
sink(v4); // $ ast,ir
}
void taint_vector_output_iterator(std::vector<int>::iterator iter) {
@@ -470,7 +470,7 @@ void test_vector_memcpy()
sink(v);
memcpy(&v[i], &s, sizeof(int));
sink(v); // $ ast MISSING: ir
sink(v); // $ ast,ir
}
{
@@ -479,11 +479,11 @@ void test_vector_memcpy()
const size_t offs = 10;
const size_t len = src.length();
sink(src); // $ ast MISSING: ir
sink(src); // $ ast,ir
sink(cs);
memcpy(&cs[offs + 1], src.c_str(), len);
sink(src); // $ ast MISSING: ir
sink(cs); // $ ast MISSING: ir
sink(src); // $ ast,ir
sink(cs); // $ ast,ir
}
}
@@ -491,10 +491,10 @@ void test_vector_emplace() {
std::vector<int> v1(10), v2(10);
v1.emplace_back(source());
sink(v1); // $ ast MISSING: ir
sink(v1); // $ ast,ir
v2.emplace(v2.begin(), source());
sink(v2); // $ ast MISSING: ir
sink(v2); // $ ast,ir
}
void test_vector_iterator() {