Fixture 116

string literals

C · 4 functions · 4 lanes · 10 of 16 function-lanes behave identically

4 of 4 lanes have a function that returns a different result after decompilation: clang-O2 (2/4), gcc-O2 (2/4), clang-O0 (3/4), gcc-O0 (3/4).

String literals: adjacent literals concatenate at translation phase 6, the terminating NUL is part of the object, and sizeof counts it while a length scan does not. The literal itself lands in read-only data.

tests/decompiler_fixtures/src/116_string_literals.c source
#include <stdint.h>

/* String literals: adjacent literals concatenate at translation phase 6, the
 * terminating NUL is part of the object, and sizeof counts it while a length
 * scan does not. The literal itself lands in read-only data. */

__attribute__((noinline)) int32_t literal_size_versus_length(void) {
    static const char greeting[] = "abc" "def";
    int32_t length = 0;
    while (greeting[length] != '\0') {
        length += 1;
    }
    return (int32_t)sizeof(greeting) * 100 + length;
}

__attribute__((noinline)) int32_t literal_index(int32_t index) {
    if (index < 0 || index > 5) {
        return -1;
    }
    return (int32_t)"HELLO!"[index];
}

__attribute__((noinline)) int32_t
count_matching(const uint8_t *text, int32_t length, int32_t target) {
    static const char vowels[] = "aeiou";
    int32_t matches = 0;
    int32_t index;
    int32_t vowel;
    if (text == 0 || length < 0 || length > 16) {
        return -1;
    }
    for (index = 0; index < length; ++index) {
        for (vowel = 0; vowel < 5; ++vowel) {
            if ((int32_t)text[index] == (int32_t)(uint8_t)vowels[vowel]) {
                matches += 1;
            }
        }
    }
    return matches + (target != 0);
}

__attribute__((noinline)) int32_t escape_sequences(int32_t which) {
    static const char escapes[] = "\t\n\\\0X";
    if (which < 0 || which > 4) {
        return -1;
    }
    return (int32_t)escapes[which];
}

Recovered C

Generated by glaurung decompile --style decbench at b47f6b43. baseline.json records the result after recompiling the C and calling it beside the original with seeded inputs.

clang -O2

2/4
count_matching fail 160 lines
// glaurung: count_matching @ 0x1130
int32_t count_matching(const uint8_t * arg0, int32_t arg1, int32_t arg2) {
    extern long __unknown(long, ...);
    int matches;
    int index;
    int vowel;
    long ret;
    int var111;
    int var112;
    int var123;
    int var124;
    int var125;
    int var126;
    int var145;
    int var146;
    int var169;
    int var170;
    int var189;
    int var19;
    int var190;
    long var2;
    int var20;
    int var213;
    int var214;
    int var233;
    int var234;
    int var267;
    int var268;
    int var27;
    int var28;
    int var29;
    int var291;
    int var292;
    long var3;
    int var30;
    int var311;
    int var312;
    int var335;
    int var336;
    int var355;
    int var356;
    int var384;
    int var385;
    int var408;
    int var409;
    int var428;
    int var429;
    int var43;
    int var44;
    int var452;
    int var453;
    int var472;
    int var473;
    int var509;
    int var538;
    long var6;
    int var67;
    int var68;
    int var87;
    int var88;
    ret = 0xffffffff;
    if ((arg0 == 0)) {
        return ret;
    }
    if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
        return ret;
    }
    if (((unsigned long)((unsigned int)(arg1)) == 0)) {
        var2 = 0;
    } else {
        var3 = (unsigned long)((unsigned int)(arg1));
        if (((unsigned long)(4) <= (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
            var6 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var3)) & -4)));
            var19 = __unknown(0);
            var20 = __unknown(0);
            var27 = 1;
            var28 = 1;
            var29 = 1;
            var30 = 1;
            var43 = __unknown(0);
            var44 = __unknown(0);
            var67 = __unknown(0);
            var68 = __unknown(0);
            var87 = __unknown(0);
            var88 = __unknown(0);
            var111 = __unknown(0);
            var112 = __unknown(0);
            var123 = ((((unsigned int)((unsigned short)(var111)) | ((unsigned int)((unsigned short)(var111)) << 16)) & 1) + (((((unsigned int)((unsigned short)(var87)) | ((unsigned int)((unsigned short)(var87)) << 16)) & 1) + (((unsigned int)((unsigned short)(var67)) | ((unsigned int)((unsigned short)(var67)) << 16)) & 1)) + ((((unsigned int)((unsigned short)(var43)) | ((unsigned int)((unsigned short)(var43)) << 16)) & 1) + (((unsigned int)((unsigned short)(var19)) | ((unsigned int)((unsigned short)(var19)) << 16)) & 1))));
            var124 = ((((unsigned int)((unsigned short)((((unsigned int)(var111) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var111) >> 16) & 0xffff))) << 16)) & 1) + (((((unsigned int)((unsigned short)((((unsigned int)(var87) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var87) >> 16) & 0xffff))) << 16)) & 1) + (((unsigned int)((unsigned short)((((unsigned int)(var67) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var67) >> 16) & 0xffff))) << 16)) & 1)) + ((((unsigned int)((unsigned short)((((unsigned int)(var43) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var43) >> 16) & 0xffff))) << 16)) & 1) + (((unsigned int)((unsigned short)((((unsigned int)(var19) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var19) >> 16) & 0xffff))) << 16)) & 1))));
            var125 = ((((unsigned int)((unsigned short)(var112)) | ((unsigned int)((unsigned short)(var112)) << 16)) & 1) + (((((unsigned int)((unsigned short)(var88)) | ((unsigned int)((unsigned short)(var88)) << 16)) & 1) + (((unsigned int)((unsigned short)(var68)) | ((unsigned int)((unsigned short)(var68)) << 16)) & 1)) + ((((unsigned int)((unsigned short)(var44)) | ((unsigned int)((unsigned short)(var44)) << 16)) & 1) + (((unsigned int)((unsigned short)(var20)) | ((unsigned int)((unsigned short)(var20)) << 16)) & 1))));
            var126 = ((((unsigned int)((unsigned short)((((unsigned int)(var112) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var112) >> 16) & 0xffff))) << 16)) & 1) + (((((unsigned int)((unsigned short)((((unsigned int)(var88) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var88) >> 16) & 0xffff))) << 16)) & 1) + (((unsigned int)((unsigned short)((((unsigned int)(var68) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var68) >> 16) & 0xffff))) << 16)) & 1)) + ((((unsigned int)((unsigned short)((((unsigned int)(var44) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var44) >> 16) & 0xffff))) << 16)) & 1) + (((unsigned int)((unsigned short)((((unsigned int)(var20) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var20) >> 16) & 0xffff))) << 16)) & 1))));
            if ((var6 != 4)) {
                var145 = __unknown(0);
                var146 = __unknown(0);
                var169 = __unknown(0);
                var170 = __unknown(0);
                var189 = __unknown(0);
                var190 = __unknown(0);
                var213 = __unknown(0);
                var214 = __unknown(0);
                var233 = __unknown(0);
                var234 = __unknown(0);
                var123 = (((((unsigned int)((unsigned short)(var233)) | ((unsigned int)((unsigned short)(var233)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var213)) | ((unsigned int)((unsigned short)(var213)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var189)) | ((unsigned int)((unsigned short)(var189)) << 16)) & var27) + (((unsigned int)((unsigned short)(var169)) | ((unsigned int)((unsigned short)(var169)) << 16)) & var27)))) + (var123 + (((unsigned int)((unsigned short)(var145)) | ((unsigned int)((unsigned short)(var145)) << 16)) & var27)));
                var124 = (((((unsigned int)((unsigned short)((((unsigned int)(var233) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var233) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var213) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var213) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var189) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var189) >> 16) & 0xffff))) << 16)) & var28) + (((unsigned int)((unsigned short)((((unsigned int)(var169) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var169) >> 16) & 0xffff))) << 16)) & var28)))) + (var124 + (((unsigned int)((unsigned short)((((unsigned int)(var145) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var145) >> 16) & 0xffff))) << 16)) & var28)));
                var125 = (((((unsigned int)((unsigned short)(var234)) | ((unsigned int)((unsigned short)(var234)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var214)) | ((unsigned int)((unsigned short)(var214)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var190)) | ((unsigned int)((unsigned short)(var190)) << 16)) & var29) + (((unsigned int)((unsigned short)(var170)) | ((unsigned int)((unsigned short)(var170)) << 16)) & var29)))) + (var125 + (((unsigned int)((unsigned short)(var146)) | ((unsigned int)((unsigned short)(var146)) << 16)) & var29)));
                var126 = (((((unsigned int)((unsigned short)((((unsigned int)(var234) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var234) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var214) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var214) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var190) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var190) >> 16) & 0xffff))) << 16)) & var30) + (((unsigned int)((unsigned short)((((unsigned int)(var170) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var170) >> 16) & 0xffff))) << 16)) & var30)))) + (var126 + (((unsigned int)((unsigned short)((((unsigned int)(var146) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var146) >> 16) & 0xffff))) << 16)) & var30)));
                if (((unsigned long)((unsigned int)(var6)) != 8)) {
                    var267 = __unknown(0);
                    var268 = __unknown(0);
                    var291 = __unknown(0);
                    var292 = __unknown(0);
                    var311 = __unknown(0);
                    var312 = __unknown(0);
                    var335 = __unknown(0);
                    var336 = __unknown(0);
                    var355 = __unknown(0);
                    var356 = __unknown(0);
                    var123 = (((((unsigned int)((unsigned short)(var355)) | ((unsigned int)((unsigned short)(var355)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var335)) | ((unsigned int)((unsigned short)(var335)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var311)) | ((unsigned int)((unsigned short)(var311)) << 16)) & var27) + (((unsigned int)((unsigned short)(var291)) | ((unsigned int)((unsigned short)(var291)) << 16)) & var27)))) + (var123 + (((unsigned int)((unsigned short)(var267)) | ((unsigned int)((unsigned short)(var267)) << 16)) & var27)));
                    var124 = (((((unsigned int)((unsigned short)((((unsigned int)(var355) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var355) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var335) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var335) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var311) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var311) >> 16) & 0xffff))) << 16)) & var28) + (((unsigned int)((unsigned short)((((unsigned int)(var291) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var291) >> 16) & 0xffff))) << 16)) & var28)))) + (var124 + (((unsigned int)((unsigned short)((((unsigned int)(var267) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var267) >> 16) & 0xffff))) << 16)) & var28)));
                    var125 = (((((unsigned int)((unsigned short)(var356)) | ((unsigned int)((unsigned short)(var356)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var336)) | ((unsigned int)((unsigned short)(var336)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var312)) | ((unsigned int)((unsigned short)(var312)) << 16)) & var29) + (((unsigned int)((unsigned short)(var292)) | ((unsigned int)((unsigned short)(var292)) << 16)) & var29)))) + (var125 + (((unsigned int)((unsigned short)(var268)) | ((unsigned int)((unsigned short)(var268)) << 16)) & var29)));
                    var126 = (((((unsigned int)((unsigned short)((((unsigned int)(var356) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var356) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var336) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var336) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var312) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var312) >> 16) & 0xffff))) << 16)) & var30) + (((unsigned int)((unsigned short)((((unsigned int)(var292) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var292) >> 16) & 0xffff))) << 16)) & var30)))) + (var126 + (((unsigned int)((unsigned short)((((unsigned int)(var268) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var268) >> 16) & 0xffff))) << 16)) & var30)));
                    if (((unsigned long)((unsigned int)(var6)) != 12)) {
                        var384 = __unknown(0);
                        var385 = __unknown(0);
                        var408 = __unknown(0);
                        var409 = __unknown(0);
                        var428 = __unknown(0);
                        var429 = __unknown(0);
                        var452 = __unknown(0);
                        var453 = __unknown(0);
                        var472 = __unknown(0);
                        var473 = __unknown(0);
                        var123 = ((var123 + (((unsigned int)((unsigned short)(var384)) | ((unsigned int)((unsigned short)(var384)) << 16)) & var27)) + ((((unsigned int)((unsigned short)(var472)) | ((unsigned int)((unsigned short)(var472)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var452)) | ((unsigned int)((unsigned short)(var452)) << 16)) & var27) + ((((unsigned int)((unsigned short)(var428)) | ((unsigned int)((unsigned short)(var428)) << 16)) & var27) + (((unsigned int)((unsigned short)(var408)) | ((unsigned int)((unsigned short)(var408)) << 16)) & var27)))));
                        var124 = ((var124 + (((unsigned int)((unsigned short)((((unsigned int)(var384) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var384) >> 16) & 0xffff))) << 16)) & var28)) + ((((unsigned int)((unsigned short)((((unsigned int)(var472) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var472) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var452) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var452) >> 16) & 0xffff))) << 16)) & var28) + ((((unsigned int)((unsigned short)((((unsigned int)(var428) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var428) >> 16) & 0xffff))) << 16)) & var28) + (((unsigned int)((unsigned short)((((unsigned int)(var408) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var408) >> 16) & 0xffff))) << 16)) & var28)))));
                        var125 = ((var125 + (((unsigned int)((unsigned short)(var385)) | ((unsigned int)((unsigned short)(var385)) << 16)) & var29)) + ((((unsigned int)((unsigned short)(var473)) | ((unsigned int)((unsigned short)(var473)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var453)) | ((unsigned int)((unsigned short)(var453)) << 16)) & var29) + ((((unsigned int)((unsigned short)(var429)) | ((unsigned int)((unsigned short)(var429)) << 16)) & var29) + (((unsigned int)((unsigned short)(var409)) | ((unsigned int)((unsigned short)(var409)) << 16)) & var29)))));
                        var126 = ((var126 + (((unsigned int)((unsigned short)((((unsigned int)(var385) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var385) >> 16) & 0xffff))) << 16)) & var30)) + ((((unsigned int)((unsigned short)((((unsigned int)(var473) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var473) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var453) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var453) >> 16) & 0xffff))) << 16)) & var30) + ((((unsigned int)((unsigned short)((((unsigned int)(var429) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var429) >> 16) & 0xffff))) << 16)) & var30) + (((unsigned int)((unsigned short)((((unsigned int)(var409) >> 16) & 0xffff))) | ((unsigned int)((unsigned short)((((unsigned int)(var409) >> 16) & 0xffff))) << 16)) & var30)))));
                    }
                }
            }
            matches = (unsigned long)((unsigned int)(((var126 + var124) + (var125 + var123))));
            var2 = (unsigned long)((unsigned int)(matches));
            if ((var6 != var3)) {
                L_13f0: ;
                do {
                    var509 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + var6))));
                    var538 = (((unsigned long)((unsigned char)((var509 & 255))) == 117) + (unsigned int)((((unsigned long)((unsigned char)((var509 & 255))) == 111) + (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var509 & 255))) == 105) + (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var509 & 255))) == 101) + (unsigned long)((unsigned int)((((unsigned long)((unsigned char)((var509 & 255))) == 97) + matches))))))))))));
                    matches = (unsigned long)((unsigned int)(var538));
                    index = (var6 + 1);
                    var6 = (unsigned long)((unsigned int)(index));
                    var2 = (unsigned long)((unsigned int)(var538));
                } while ((var3 != index));
            }
        } else {
            var6 = 0;
            matches = 0;
            goto L_13f0;
        }
    }
    return (unsigned int)(((unsigned int)((var2 + 1)) - ((unsigned long)((unsigned long)((unsigned int)(arg2))) < (unsigned long)(1))));
}
escape_sequences fail 9 lines
// glaurung: escape_sequences @ 0x1440
int32_t escape_sequences(int32_t arg0) {
    long ret;
    ret = 0xffffffff;
    if (((unsigned long)((unsigned long)((unsigned int)(arg0))) <= (unsigned long)(4))) {
        ret = (int)((signed char)(*(char *)(((unsigned long)((unsigned int)(arg0)) + "\t\n\\"))));
    }
    return ret;
}
literal_index pass 9 lines
// glaurung: literal_index @ 0x1110
int32_t literal_index(int32_t arg0) {
    long ret;
    ret = 0xffffffff;
    if (((unsigned long)((unsigned long)((unsigned int)(arg0))) <= (unsigned long)(5))) {
        ret = (int)((signed char)(*(char *)(((unsigned long)((unsigned int)(arg0)) + "HELLO!"))));
    }
    return ret;
}
literal_size_versus_length pass 4 lines
// glaurung: literal_size_versus_length @ 0x1100
int32_t literal_size_versus_length(void) {
    return 706;
}

gcc -O2

2/4
count_matching fail 54 lines
// glaurung: count_matching @ 0x1140
int32_t count_matching(const uint8_t * arg0, int32_t arg1, int32_t arg2) {
    int index;
    int matches;
    long t60;
    long var0;
    long var1;
    long var11;
    long var12;
    int var13;
    long var14;
    int var15;
    long var2;
    int var4;
    long var7;
    long var8;
    var0 = (unsigned long)((unsigned int)(arg1));
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    if (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1))))) {
        return 0xffffffff;
    }
    var1 = (unsigned long)((unsigned int)(arg1));
    if (((unsigned long)((unsigned int)(arg1)) == 0)) {
        t60 = ((unsigned long)((unsigned long)((unsigned int)(arg2))) < (unsigned long)(1));
        var2 = (var1 + 1);
        var4 = ((unsigned int)(var2) - t60);
        return (unsigned int)(var4);
    }
    var7 = 0x2012;
    var8 = (long)((((long)arg0 + (unsigned long)((unsigned int)((var0 - 1)))) + 1));
    var11 = 0;
    var12 = (long)arg0;
    do {
        var13 = (unsigned int)((unsigned char)(*(char *)((var12))));
        var14 = (long)("aeiou");
        var15 = 97;
        while (1) {
            var14 = (var14 + 1);
            var11 = (unsigned long)((unsigned int)((var11 + ((unsigned char)((var13 & 255)) == (unsigned char)((var15 & 255))))));
            if ((var14 == var7)) {
                break;
            }
            var15 = (unsigned int)((unsigned char)(*(char *)((var14))));
        }
        var12 = (var12 + 1);
        var1 = var11;
    } while ((var12 != var8));
    t60 = ((unsigned long)((unsigned long)((unsigned int)(arg2))) < (unsigned long)(1));
    var2 = (var1 + 1);
    var4 = ((unsigned int)(var2) - t60);
    return (unsigned int)(var4);
}
escape_sequences fail 7 lines
// glaurung: escape_sequences @ 0x11b0
int32_t escape_sequences(int32_t arg0) {
    if (((unsigned long)(4) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
        return 0xffffffff;
    }
    return (int)((signed char)(*(char *)(("\t\n\\" + (long)(arg0)))));
}
literal_index pass 7 lines
// glaurung: literal_index @ 0x1110
int32_t literal_index(int32_t arg0) {
    if (((unsigned long)(5) < (unsigned long)((unsigned long)((unsigned int)(arg0))))) {
        return 0xffffffff;
    }
    return (int)((signed char)(*(char *)(("HELLO!" + (long)(arg0)))));
}
literal_size_versus_length pass 5 lines
// glaurung: literal_size_versus_length @ 0x1100
int32_t literal_size_versus_length(void) {
    int length;
    return 706;
}

clang -O0

3/4
count_matching pass 36 lines
// glaurung: count_matching @ 0x1180
int32_t count_matching(const uint8_t * arg0, int32_t arg1, int32_t arg2) {
    int matches;
    int index;
    int vowel;
    int local_4;
    // x86-64 prologue: save rbp
    matches = 0;
    if ((arg0 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((long)(arg1) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    index = 0;
    while ((index < arg1)) {
        for (vowel = 0; ((long)(vowel) < 5); vowel++) {
            if (((unsigned int)((unsigned char)(arg0[index])) == (unsigned int)((unsigned char)(*(char *)(("aeiou" + (long)(vowel))))))) {
                matches = ((unsigned int)(matches) + 1);
            }
        }
        index = ((unsigned int)(index) + 1);
    }
    local_4 = ((unsigned int)(matches) + ((unsigned long)((unsigned int)(arg2)) != 0));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
escape_sequences fail 18 lines
// glaurung: escape_sequences @ 0x1250
int32_t escape_sequences(int32_t arg0) {
    int local_4;
    // x86-64 prologue: save rbp
    if (((long)(arg0) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 4) | ((long)(arg0) < 4)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    local_4 = (signed char)(*(char *)(("\t\n\\" + (long)(arg0))));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
literal_index pass 18 lines
// glaurung: literal_index @ 0x1140
int32_t literal_index(int32_t arg0) {
    int local_4;
    // x86-64 prologue: save rbp
    if (((long)(arg0) < 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 5) | ((long)(arg0) < 5)) == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    local_4 = (signed char)(*(char *)(("HELLO!" + (long)(arg0))));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_4);
}
literal_size_versus_length pass 9 lines
// glaurung: literal_size_versus_length @ 0x1100
int32_t literal_size_versus_length(void) {
    int length;
    // x86-64 prologue: save rbp
    for (length = 0; ((unsigned long)((unsigned int)((signed char)(*(char *)(("abcdef" + (long)(length)))))) != 0); length++) {
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(length)) + 700));
}

gcc -O0

3/4
count_matching pass 31 lines
// glaurung: count_matching @ 0x115f
int32_t count_matching(const uint8_t * arg0, int32_t arg1, int32_t arg2) {
    int matches;
    int index;
    int vowel;
    // x86-64 prologue: save rbp
    matches = 0;
    if ((arg0 == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((long)(arg1) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    index = 0;
    while ((index < arg1)) {
        for (vowel = 0; ((((unsigned long)((unsigned int)(vowel)) == 4) | ((long)(vowel) < 4)) != 0); vowel++) {
            if (((unsigned char)(((unsigned int)((unsigned char)(arg0[index])) & 255)) == (unsigned char)(((unsigned int)((unsigned char)(*(char *)(((long)(vowel) + "aeiou")))) & 255)))) {
                matches = (matches + 1);
            }
        }
        index = (index + 1);
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(matches)) + ((unsigned long)((unsigned int)(arg2)) != 0)));
}
escape_sequences fail 14 lines
// glaurung: escape_sequences @ 0x11f3
int32_t escape_sequences(int32_t arg0) {
    // x86-64 prologue: save rbp
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 4) | ((long)(arg0) < 4)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    // x86-64 epilogue: restore rbp
    return (int)((signed char)(((unsigned int)((unsigned char)(*(char *)(((long)(arg0) + "\t\n\\")))) & 255)));
}
literal_index pass 14 lines
// glaurung: literal_index @ 0x112c
int32_t literal_index(int32_t arg0) {
    // x86-64 prologue: save rbp
    if (((long)(arg0) < 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    if (((((unsigned long)((unsigned int)(arg0)) == 5) | ((long)(arg0) < 5)) == 0)) {
        // x86-64 epilogue: restore rbp
        return 0xffffffff;
    }
    // x86-64 epilogue: restore rbp
    return (int)((signed char)(((unsigned int)((unsigned char)(*(char *)(((long)(arg0) + "HELLO!")))) & 255)));
}
literal_size_versus_length pass 9 lines
// glaurung: literal_size_versus_length @ 0x10f9
int32_t literal_size_versus_length(void) {
    int length;
    // x86-64 prologue: save rbp
    for (length = 0; ((unsigned long)((unsigned char)(((unsigned int)((unsigned char)(*(char *)(((long)(length) + "abcdef")))) & 255))) != 0); length++) {
    }
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(length)) + 700));
}

← 213 fixtures