1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-ipa-icf-details" } */
3 /* { dg-require-effective-target ptr32plus } */
4
5 typedef int size_t;
6
7 typedef struct TypHeader {
8 unsigned long size;
9 struct TypHeader * * ptr;
10 char name[3];
11 unsigned char type;
12 } * TypHandle;
13
14 __attribute__((noinline))
Error(const char * str,unsigned long l1,unsigned long l2)15 static TypHandle Error(const char *str, unsigned long l1, unsigned long l2)
16 {
17 return 0;
18 }
19
20 extern TypHandle (* EvTab[81]) ( TypHandle hd );
21 extern TypHandle (*TabProd[28][28]) ( TypHandle, TypHandle );
22
23 __attribute__((noinline))
FunOnRight(TypHandle hdCall)24 TypHandle FunOnRight (TypHandle hdCall)
25 {
26 TypHandle hdRes;
27 TypHandle hdPnt;
28 TypHandle hdElm;
29
30
31 if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) )
32 return Error("",0L,0L);
33 hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1])));
34 hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2])));
35
36
37 hdRes = ((*TabProd[(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))][(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))])((hdPnt),(hdElm)));
38 return hdRes;
39 }
40
41 __attribute__((noinline))
FunOnLeft(TypHandle hdCall)42 TypHandle FunOnLeft (TypHandle hdCall)
43 {
44 TypHandle hdRes;
45 TypHandle hdPnt;
46 TypHandle hdElm;
47
48
49 if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) )
50 return Error("",0L,0L);
51 hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1])));
52 hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2])));
53
54
55 hdRes = ((*TabProd[(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))][(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))])((hdElm),(hdPnt)));
56 return hdRes;
57 }
58
main()59 int main()
60 {
61 return 0;
62 }
63
64 /* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */
65 /* { dg-final { scan-ipa-dump "PHI results are different" "icf" } } */
66