1. A method used in a concurrent program analysis for detecting potential race conditions, such as data races, in a computer program, comprising: receiving a source code of the computer program, the source code including an element annotated as either thread-local or thread-shared; determining if the element is annotated as thread-shared or thread-local; and verifying the validity of the thread-local annotation if the element is annotated as thread-local, wherein an invalid thread-local annotation may cause a race condition.