According OpenMP 2.5 specification we can't use OpenMP in pure procedures. Why so? I mean, what if I what use PURE procedures also for compiler-checking of purity of my code (not only for parallelization)?
Have you considered using conditional compilation?
When _OPENMP not defined compile the affected routines with PURE
When _OPENMP defined compile the affected routines without PURE
If you use the Fortran PreProcessor you could define a macro as follows
#define TEST_PURE pure
Then use as
TEST_PURE function foo(a,b,c)