1 /* { dg-options "-O2 -mcmodel=small -fPIC -fno-builtin" }  */
2 /* { dg-do compile } */
3 
4 typedef long unsigned int size_t;
5 enum
6 {
7   __LC_TIME = 2,
8 };
9 enum
10 {
11   ABDAY_1 = (((__LC_TIME) << 16) | (0)),
12   DAY_1,
13   ABMON_1,
14   MON_1,
15   D_T_FMT,
16 };
17 typedef struct __locale_struct
18 {
19   struct locale_data *__locales[13];
20 } *__locale_t;
21 struct tm
22 {
23   int tm_sec;
24   int tm_min;
25   int tm_hour;
26 };
27 struct locale_data
28 {
29   const char *name;
30   struct
31   {
32     const char *string;
33   }
34   values [];
35 };
36 extern const struct locale_data _nl_C_LC_TIME __attribute__ ((visibility ("hidden")));
37 extern void *memset (void *s, int c, size_t n);
38 extern size_t strlen (const char *s);
39 extern int __strncasecmp_l (const char *s1, const char *s2, size_t n, __locale_t locale);
40 char *
__strptime_internal(rp,fmt,tmp,statep,locale)41 __strptime_internal (rp, fmt, tmp, statep , locale)
42      const char *rp;
43      const char *fmt;
44      __locale_t locale;
45      void *statep;
46      int tmp;
47 {
48   struct locale_data *const current = locale->__locales[__LC_TIME];
49   const char *rp_backup;
50   const char *rp_longest;
51   int cnt;
52   size_t val;
53   enum ptime_locale_status { not, loc, raw } decided_longest;
54   struct __strptime_state
55   {
56     enum ptime_locale_status decided : 2;
57   } s;
58   struct tm tmb;
59   struct tm *tm;
60   if (statep == ((void *)0))
61     {
62       memset (&s, 0, sizeof (s));
63     }
64     {
65       tm = &tmb;
66     }
67   while (*fmt != '\0')
68     {
69       if (*fmt != '%')
70  {
71    if (*fmt++ != *rp++) return ((void *)0);
72    continue;
73  }
74       if (statep != ((void *)0))
75  {
76      ++fmt;
77  }
78       rp_backup = rp;
79       switch (*fmt++)
80  {
81  case '%':
82    for (cnt = 0; cnt < 7; ++cnt)
83      {
84        const char *trp;
85        if (s.decided !=raw)
86   {
87     if (({ size_t len = strlen ((current->values[((int) (DAY_1 + cnt) & 0xffff)].string)); int result = __strncasecmp_l (((current->values[((int) (DAY_1 + cnt) & 0xffff)].string)), (trp), len, locale) == 0; if (result) (trp) += len; result; })
88         && trp > rp_longest)
89       {
90       }
91     if (({ size_t len = strlen ((current->values[((int) (ABDAY_1 + cnt) & 0xffff)].string)); int result = __strncasecmp_l (((current->values[((int) (ABDAY_1 + cnt) & 0xffff)].string)), (trp), len, locale) == 0; if (result) (trp) += len; result; })
92         && trp > rp_longest)
93       {
94       }
95   }
96        if (s.decided != loc
97     && (((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (DAY_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (DAY_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; }))
98          && trp > rp_longest)
99         || ((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (ABDAY_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (ABDAY_1) & 0xffff)].string)[cnt]), (rp), len, locale) == 0; if (result) (rp) += len; result; }))
100      && trp > rp_longest)))
101   {
102   }
103      }
104      {
105        const char *trp;
106        if (s.decided != loc
107     && (((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (MON_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (MON_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; }))
108          && trp > rp_longest)
109         || ((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (ABMON_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (ABMON_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; }))
110      && trp > rp_longest)))
111   {
112   }
113      }
114  case 'c':
115      {
116        if (!(*((current->values[((int) (D_T_FMT) & 0xffff)].string)) != '\0' && (rp = __strptime_internal (rp, ((current->values[((int) (D_T_FMT) & 0xffff)].string)), tm, &s , locale)) != ((void *)0)))
117   {
118       rp = rp_backup;
119   }
120      }
121  case 'C':
122    do { int __n = 2; val = 0; while (*rp == ' ') ++rp; if (*rp < '0' || *rp > '9') return ((void *)0); do { val *= 10; val += *rp++ - '0'; } while (--__n > 0 && val * 10 <= 99 && *rp >= '0' && *rp <= '9'); if (val < 0 || val > 99) return ((void *)0); } while (0);
123  case 'F':
124    if (!(*("%Y-%m-%d") != '\0' && (rp = __strptime_internal (rp, ("%Y-%m-%d"), tm, &s , locale)) != ((void *)0)))
125    tm->tm_hour = val % 12;
126  }
127     }
128 }
129 char *
__strptime_l(buf,format,tm,locale)130 __strptime_l (buf, format, tm , locale)
131      int buf;
132      int format;
133      int tm;
134      int locale;
135 {
136 }
137