mirror of
https://github.com/github/codeql.git
synced 2026-05-05 13:45:19 +02:00
C++: Finish up implementation of MaD barriers.
This commit is contained in:
@@ -26,25 +26,25 @@ void sink(int*);
|
||||
void test_mad(int x, int* p) {
|
||||
{
|
||||
if(is_clean_value(&x)) {
|
||||
sink(x); // $ MISSING: external=int
|
||||
sink(x); // $ external=int
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
if(is_clean_value(p)) {
|
||||
sink(*p); // $ MISSING: external=int
|
||||
sink(*p); // $ external=int
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
if(is_clean_pointer(p)) {
|
||||
sink(p); // $ MISSING: external=int*
|
||||
sink(p); // $ external=int*
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
if(is_clean_pointer(&x)) {
|
||||
sink(x); // $ MISSING: external=glval<int>
|
||||
sink(x); // $ external=glval<int>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,8 +28,15 @@ predicate barrierGuard(DataFlow::Node node, string s) {
|
||||
else s = node.getType().toString().replaceAll(" ", "")
|
||||
}
|
||||
|
||||
predicate externalBarrierGuard(DataFlow::Node node, string s) {
|
||||
barrierNode(node, "test-barrier") and
|
||||
if node.isGLValue()
|
||||
then s = "glval<" + node.getType().toString().replaceAll(" ", "") + ">"
|
||||
else s = node.getType().toString().replaceAll(" ", "")
|
||||
}
|
||||
|
||||
module Test implements TestSig {
|
||||
string getARelevantTag() { result = ["barrier", "indirect_barrier"] }
|
||||
string getARelevantTag() { result = ["barrier", "indirect_barrier", "external"] }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(DataFlow::Node node |
|
||||
@@ -38,6 +45,9 @@ module Test implements TestSig {
|
||||
or
|
||||
barrierGuard(node, value) and
|
||||
tag = "barrier"
|
||||
or
|
||||
externalBarrierGuard(node, value) and
|
||||
tag = "external"
|
||||
|
|
||||
element = node.toString() and
|
||||
location = node.getLocation()
|
||||
|
||||
Reference in New Issue
Block a user