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