Index: import/core/stdc/time.d
===================================================================
--- import/core/stdc/time.d	(revision 161)
+++ import/core/stdc/time.d	(working copy)
@@ -72,13 +72,14 @@
 }
 
 clock_t clock();
-double  difftime(time_t time1, time_t time0);
+double  difftime(time_t time1, time_t time0) pure;
 time_t  mktime(tm* timeptr);
 time_t  time(time_t* timer);
 char*   asctime(in tm* timeptr);
 char*   ctime(in time_t* timer);
 tm*     gmtime(in time_t* timer);
 tm*     localtime(in time_t* timer);
+// should strftime be considered pure?  It neither uses nor mutates any global state
 size_t  strftime(char* s, size_t maxsize, in char* format, in tm* timeptr);
 
 version( Windows )
Index: import/core/stdc/wchar_.d
===================================================================
--- import/core/stdc/wchar_.d	(revision 163)
+++ import/core/stdc/wchar_.d	(working copy)
@@ -69,25 +69,26 @@
 wchar_t* wcsncpy(wchar_t* s1, in wchar_t* s2, size_t n);
 wchar_t* wcscat(wchar_t* s1, in wchar_t* s2);
 wchar_t* wcsncat(wchar_t* s1, in wchar_t* s2, size_t n);
-int      wcscmp(in wchar_t* s1, in wchar_t* s2);
-int      wcscoll(in wchar_t* s1, in wchar_t* s2);
-int      wcsncmp(in wchar_t* s1, in wchar_t* s2, size_t n);
+int      wcscmp(in wchar_t* s1, in wchar_t* s2) pure;
+int      wcscoll(in wchar_t* s1, in wchar_t* s2) pure;
+int      wcsncmp(in wchar_t* s1, in wchar_t* s2, size_t n) pure;
 size_t   wcsxfrm(wchar_t* s1, in wchar_t* s2, size_t n);
-wchar_t* wcschr(in wchar_t* s, wchar_t c);
-size_t   wcscspn(in wchar_t* s1, in wchar_t* s2);
-wchar_t* wcspbrk(in wchar_t* s1, in wchar_t* s2);
-wchar_t* wcsrchr(in wchar_t* s, wchar_t c);
-size_t   wcsspn(in wchar_t* s1, in wchar_t* s2);
-wchar_t* wcsstr(in wchar_t* s1, in wchar_t* s2);
+wchar_t* wcschr(in wchar_t* s, wchar_t c) pure;
+size_t   wcscspn(in wchar_t* s1, in wchar_t* s2) pure;
+wchar_t* wcspbrk(in wchar_t* s1, in wchar_t* s2) pure;
+wchar_t* wcsrchr(in wchar_t* s, wchar_t c) pure;
+size_t   wcsspn(in wchar_t* s1, in wchar_t* s2) pure;
+wchar_t* wcsstr(in wchar_t* s1, in wchar_t* s2) pure;
 wchar_t* wcstok(wchar_t* s1, in wchar_t* s2, wchar_t** ptr);
-size_t   wcslen(in wchar_t* s);
+size_t   wcslen(in wchar_t* s) pure;
 
-wchar_t* wmemchr(in wchar_t* s, wchar_t c, size_t n);
-int      wmemcmp(in wchar_t* s1, in wchar_t* s2, size_t n);
+wchar_t* wmemchr(in wchar_t* s, wchar_t c, size_t n) pure;
+int      wmemcmp(in wchar_t* s1, in wchar_t* s2, size_t n) pure;
 wchar_t* wmemcpy(wchar_t* s1, in wchar_t* s2, size_t n);
 wchar_t* wmemmove(wchar_t*s1, in wchar_t* s2, size_t n);
 wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
 
+// should this be pure?  Same reason as strftime
 size_t wcsftime(wchar_t* s, size_t maxsize, in wchar_t* format, in tm* timeptr);
 
 version( Windows )
@@ -98,6 +99,7 @@
     wchar_t* _wstrtime(wchar_t*); // non-standard
 }
 
+// should these be pure, they depend on an env var, LC_CTYPE
 wint_t btowc(int c);
 int    wctob(wint_t c);
 int    mbsinit(in mbstate_t* ps);
Index: import/core/stdc/string.d
===================================================================
--- import/core/stdc/string.d	(revision 161)
+++ import/core/stdc/string.d	(working copy)
@@ -17,8 +17,8 @@
 
 extern (C):
 
-void* memchr(in void* s, int c, size_t n);
-int   memcmp(in void* s1, in void* s2, size_t n);
+void* memchr(in void* s, int c, size_t n) pure;
+int   memcmp(in void* s1, in void* s2, size_t n) pure;
 void* memcpy(void* s1, in void* s2, size_t n);
 void* memmove(void* s1, in void* s2, size_t n);
 void* memset(void* s, int c, size_t n);
@@ -27,16 +27,16 @@
 char*  strncpy(char* s1, in char* s2, size_t n);
 char*  strcat(char* s1, in char* s2);
 char*  strncat(char* s1, in char* s2, size_t n);
-int    strcmp(in char* s1, in char* s2);
-int    strcoll(in char* s1, in char* s2);
-int    strncmp(in char* s1, in char* s2, size_t n);
+int    strcmp(in char* s1, in char* s2) pure;
+int    strcoll(in char* s1, in char* s2) pure;
+int    strncmp(in char* s1, in char* s2, size_t n) pure;
 size_t strxfrm(char* s1, in char* s2, size_t n);
-char*  strchr(in char* s, int c);
-size_t strcspn(in char* s1, in char* s2);
-char*  strpbrk(in char* s1, in char* s2);
-char*  strrchr(in char* s, int c);
-size_t strspn(in char* s1, in char* s2);
-char*  strstr(in char* s1, in char* s2);
+char*  strchr(in char* s, int c) pure;
+size_t strcspn(in char* s1, in char* s2) pure;
+char*  strpbrk(in char* s1, in char* s2) pure;
+char*  strrchr(in char* s, int c) pure;
+size_t strspn(in char* s1, in char* s2) pure;
+char*  strstr(in char* s1, in char* s2) pure;
 char*  strtok(char* s1, in char* s2);
 char*  strerror(int errnum);
-size_t strlen(in char* s);
+size_t strlen(in char* s) pure;
Index: import/core/stdc/wctype.d
===================================================================
--- import/core/stdc/wctype.d	(revision 161)
+++ import/core/stdc/wctype.d	(working copy)
@@ -20,6 +20,7 @@
 alias wchar_t wctrans_t;
 alias wchar_t wctype_t;
 
+// should these be pure, they depend on LC_CTYPE
 int iswalnum(wint_t wc);
 int iswalpha(wint_t wc);
 int iswblank(wint_t wc);
@@ -38,4 +39,4 @@
 wint_t    towlower(wint_t wc);
 wint_t    towupper(wint_t wc);
 wint_t    towctrans(wint_t wc, wctrans_t desc);
-wctrans_t wctrans(in char* property);
\ No newline at end of file
+wctrans_t wctrans(in char* property);
Index: import/core/stdc/inttypes.d
===================================================================
--- import/core/stdc/inttypes.d	(revision 161)
+++ import/core/stdc/inttypes.d	(working copy)
@@ -248,9 +248,10 @@
     enum _cstr SCNxPTR      = SCNx32;
 }
 
-intmax_t  imaxabs(intmax_t j);
-imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
-intmax_t  strtoimax(in char* nptr, char** endptr, int base);
-uintmax_t strtoumax(in char* nptr, char** endptr, int base);
-intmax_t  wcstoimax(in wchar_t* nptr, wchar_t** endptr, int base);
-uintmax_t wcstoumax(in wchar_t* nptr, wchar_t** endptr, int base);
+intmax_t  imaxabs(intmax_t j) pure;
+imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom) pure;
+intmax_t  strtoimax(in char* nptr, char** endptr, int base) pure;
+uintmax_t strtoumax(in char* nptr, char** endptr, int base) pure;
+intmax_t  wcstoimax(in wchar_t* nptr, wchar_t** endptr, int base) pure;
+uintmax_t wcstoumax(in wchar_t* nptr, wchar_t** endptr, int base) pure;
+
Index: import/core/stdc/stdlib.d
===================================================================
--- import/core/stdc/stdlib.d	(revision 161)
+++ import/core/stdc/stdlib.d	(working copy)
@@ -41,18 +41,18 @@
 enum RAND_MAX     = 32767;
 enum MB_CUR_MAX   = 1;
 
-double  atof(in char* nptr);
-int     atoi(in char* nptr);
-c_long  atol(in char* nptr);
-long    atoll(in char* nptr);
+double  atof(in char* nptr) pure;
+int     atoi(in char* nptr) pure;
+c_long  atol(in char* nptr) pure;
+long    atoll(in char* nptr) pure;
 
-double  strtod(in char* nptr, char** endptr);
-float   strtof(in char* nptr, char** endptr);
-real    strtold(in char* nptr, char** endptr);
-c_long  strtol(in char* nptr, char** endptr, int base);
-long    strtoll(in char* nptr, char** endptr, int base);
-c_ulong strtoul(in char* nptr, char** endptr, int base);
-ulong   strtoull(in char* nptr, char** endptr, int base);
+double  strtod(in char* nptr, char** endptr) pure;
+float   strtof(in char* nptr, char** endptr) pure;
+real    strtold(in char* nptr, char** endptr) pure;
+c_long  strtol(in char* nptr, char** endptr, int base) pure;
+long    strtoll(in char* nptr, char** endptr, int base) pure;
+c_ulong strtoul(in char* nptr, char** endptr, int base) pure;
+ulong   strtoull(in char* nptr, char** endptr, int base) pure;
 
 int     rand();
 void    srand(uint seed);
@@ -70,17 +70,18 @@
 char*   getenv(in char* name);
 int     system(in char* string);
 
-void*   bsearch(in void* key, in void* base, size_t nmemb, size_t size, int function(in void*, in void*) compar);
+void*   bsearch(in void* key, in void* base, size_t nmemb, size_t size, int function(in void*, in void*) compar) pure;
 void    qsort(void* base, size_t nmemb, size_t size, int function(in void*, in void*) compar);
 
-int     abs(int j);
-c_long  labs(c_long j);
-long    llabs(long j);
+int     abs(int j) pure;
+c_long  labs(c_long j) pure;
+long    llabs(long j) pure;
 
-div_t   div(int numer, int denom);
-ldiv_t  ldiv(c_long numer, c_long denom);
-lldiv_t lldiv(long numer, long denom);
+div_t   div(int numer, int denom) pure;
+ldiv_t  ldiv(c_long numer, c_long denom) pure;
+lldiv_t lldiv(long numer, long denom) pure;
 
+// should these be pure?  They do depend on an external env variable LC_CTYPE
 int     mblen(in char* s, size_t n);
 int     mbtowc(wchar_t* pwc, in char* s, size_t n);
 int     wctomb(char*s, wchar_t wc);
Index: import/core/stdc/ctype.d
===================================================================
--- import/core/stdc/ctype.d	(revision 161)
+++ import/core/stdc/ctype.d	(working copy)
@@ -15,17 +15,17 @@
 
 extern (C):
 
-int isalnum(int c);
-int isalpha(int c);
-int isblank(int c);
-int iscntrl(int c);
-int isdigit(int c);
-int isgraph(int c);
-int islower(int c);
-int isprint(int c);
-int ispunct(int c);
-int isspace(int c);
-int isupper(int c);
-int isxdigit(int c);
-int tolower(int c);
-int toupper(int c);
+int isalnum(int c) pure;
+int isalpha(int c) pure;
+int isblank(int c) pure;
+int iscntrl(int c) pure;
+int isdigit(int c) pure;
+int isgraph(int c) pure;
+int islower(int c) pure;
+int isprint(int c) pure;
+int ispunct(int c) pure;
+int isspace(int c) pure;
+int isupper(int c) pure;
+int isxdigit(int c) pure;
+int tolower(int c) pure;
+int toupper(int c) pure;
