| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-ipa-icf-details" } */ |
| /* { dg-require-effective-target ptr32plus } */ |
| |
| typedef int size_t; |
| |
| typedef struct TypHeader { |
| unsigned long size; |
| struct TypHeader * * ptr; |
| char name[3]; |
| unsigned char type; |
| } * TypHandle; |
| |
| __attribute__((noinline)) |
| static TypHandle Error(const char *str, unsigned long l1, unsigned long l2) |
| { |
| return 0; |
| } |
| |
| extern TypHandle (* EvTab[81]) ( TypHandle hd ); |
| extern TypHandle (*TabProd[28][28]) ( TypHandle, TypHandle ); |
| |
| __attribute__((noinline)) |
| TypHandle FunOnRight (TypHandle hdCall) |
| { |
| TypHandle hdRes; |
| TypHandle hdPnt; |
| TypHandle hdElm; |
| |
| |
| if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) ) |
| return Error("",0L,0L); |
| 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]))); |
| 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]))); |
| |
| |
| hdRes = ((*TabProd[(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))][(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))])((hdPnt),(hdElm))); |
| return hdRes; |
| } |
| |
| __attribute__((noinline)) |
| TypHandle FunOnLeft (TypHandle hdCall) |
| { |
| TypHandle hdRes; |
| TypHandle hdPnt; |
| TypHandle hdElm; |
| |
| |
| if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) ) |
| return Error("",0L,0L); |
| 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]))); |
| 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]))); |
| |
| |
| hdRes = ((*TabProd[(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))][(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))])((hdElm),(hdPnt))); |
| return hdRes; |
| } |
| |
| int main() |
| { |
| return 0; |
| } |
| |
| /* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */ |
| /* { dg-final { scan-ipa-dump "PHI results are different" "icf" } } */ |