This is an archive of the discontinued LLVM Phabricator instance.

Add element-atomic mem intrinsic canary tests for Dataflow Sanitizer.
ClosedPublic

Authored by dneilson on Jul 17 2017, 2:10 PM.

Details

Summary

Add canary tests to verify that DFSAN currently does nothing with the element atomic memory intrinsics for memcpy, memmove, and memset.

Placeholder tests that will fail once @llvm.mem[cpy|move|set] instrinsics have been added to the MemIntrinsic class hierarchy. These will act as a reminder to verify that DFSAN handles these intrinsics properly once they have been added to that class hierarchy.

Note that there could be some trickiness with these element-atomic intrinsics for the dataflow sanitizer in racy multithreaded programs. The data flow sanitizer inserts additional lib calls to mirror the memory intrinsic's action, so it is possible (very likely, even) that the dfsan buffers will not be in sync with the original buffers. Furthermore, implementation of the dfsan buffer updates for the element atomic intrinsics will have to also use unordered atomic instructions. If we can assume that dfsan is never run on racy multithreaded programs, then the element atomic memory intrinsics can pretty much be treated the same as the regular memory intrinsics.

Diff Detail

Repository
rL LLVM

Event Timeline

dneilson created this revision.Jul 17 2017, 2:10 PM
dneilson edited the summary of this revision. (Show Details)Jul 17 2017, 2:28 PM
reames accepted this revision.Jul 17 2017, 2:30 PM

LGTM except that assuming the atomic versions only get used on race-free programs would seem well, odd to say the least.

This revision is now accepted and ready to land.Jul 17 2017, 2:30 PM
This revision was automatically updated to reflect the committed changes.