+wendian

This option enables diagnostics that identify areas in the source code that might have porting issues between little-endian and big-endian. For example

de-reference which could cause endian-dependent behavior

Union definition that is endian dependent

Example

$ cat endian.c union u1 {

char c[4]; int v;

};

$ cc -c +wendian endian.c

"endian.c", line 1: warning #4289-D: endian porting: the definition of the union may be endian dependent

union u1 {

^

+wlock

This option detects multi-threaded programming issues and enables diagnostics for potential errors in using lock/unlock calls in multi-threaded programs that use the pthread library. This is based on cross-module analysis performed by the compiler, which is much more powerful compared to simple scanning and parsing tools. The +wlock option implicitly enables a limited form of cross-module analysis even if -ipoor +O4 options are not specified. This may lead to a significant increase in the compile time in comparison to a build without the +wlock option. Using this option may result in the compiler invoking optimizations other than those which are part of the specified optimization level. If +wlock is used with -ipoor +O4 option, the generated code is not affected and the compile time does not increase much.

The problems detected by +wlock diagnostics include

acquiring an already acquired lock

releasing an already released lock

unconditionally releasing a conditionally acquired lock

Example

$ cat lock.c #include <pthread.h> #include <stdio.h>

int a;

pthread_mutex_t Mutex;

void perform_operation(pthread_mutex_t* mutex1, int increment, int* global) {

if (increment > 10){

int status = pthread_mutex_lock(mutex1);

}

*global = *global + increment;

int status = pthread_mutex_unlock(&Mutex);

}

int main(void) { int i; scanf("%d", &i);

perform_operation(&Mutex, i, &a); printf("%d is value\n", a);

}

$ cc +wlock lock.c

4