139092Srnordier// { dg-do run  }
239092Srnordiertemplate <class STRUCT, class MEMBER> inline STRUCT *
339092Srnordiersetback(MEMBER *bp, MEMBER STRUCT::*offset)
439092Srnordier{
539092Srnordier        if(!bp) return 0;
639092Srnordier        union { int i; MEMBER STRUCT::*of; } u;
739092Srnordier        u.of = offset;
839092Srnordier        return (STRUCT *) ((__SIZE_TYPE__) bp - u.i);
939092Srnordier}
1039092Srnordier
1139092Srnordier
1239092Srnordierstruct S
1339092Srnordier{
1439092Srnordier  int i;
1539092Srnordier};
1639092Srnordier
1739092Srnordierint main()
1839092Srnordier{
1939092Srnordier  S s;
2039092Srnordier
2139092Srnordier  S* sp = setback (&s.i, &S::i);
2239092Srnordier}
2339092Srnordier