Assuring Application-Level Correctness against Soft Errors