{"push_id":968688391,"size":6,"distinct_size":0,"ref":"refs/heads/gdc-5","head":"b956007ebf48c266f48f015e9299c46243b800ab","before":"e95a735b978da70467bbb553fab40efa3ea17569","commits":[{"sha":"c91842a73f0184cb32724a561895ff4e4a0453bc","author":{"email":"1f80d93c3b141555a89d8fa91547a9eee1b6ee96@gdcproject.org","name":"Iain Buclaw"},"message":"Better document array-set, use postincrement to adjust pointer","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/c91842a73f0184cb32724a561895ff4e4a0453bc"},{"sha":"369cb9b4c635dc206ce4863274c169752cc74a6a","author":{"email":"1f80d93c3b141555a89d8fa91547a9eee1b6ee96@gdcproject.org","name":"Iain Buclaw"},"message":"Remove 'memset' codegen in StructLiteralExp::toElem to fill alignment holes.\n\nThis has never worked so well as can be easily defeated by either returning\ndata in registers, or by the optimizer.\n\nTo ensure that code continues to work (also fixing broken code), have\nsplit struct comparison in to a few components.\n\nFor (Sa == Sb) or (Sa is Sb):\n  -> build_struct_comparison: Returns either a call to:\n\t__builtin_memcmp(&Sa, &Sb, Sa.sizeof) == 0;\n     or:\n\t(Sa.x == Sb.x && Sa.y == Sb.y && ...);\n     depending on the outcome of...\n    -> identity_compare_p: Returns true if there are no alignment holes\n       in the aggregate type.  As in, this is a candidate for memcmp.\n\n     The inverse is written as:\n\t__builtin_memcmp(&Sa, &Sb, Sa.sizeof) != 0;\n    or:\n\t(Sa.x != Sb.x || Sa.y != Sb.y || ...);\n\nFor (Sa[] == Sb[]):\n  -> EqualExp::toElem: Returns either a call to:\n\t__builtin_memcmp(Sa.ptr, Sb.ptr, Sa.length * (*Sa.ptr).sizeof) == 0;\n     or:\n    -> build_array_struct_comparison: Builds a loop, forwarding the\n       index reference to build_struct_comparison, resulting in the\n       following pseudo-codegen:\n      {\n\tbool result = true;\n\tfor (i = Sa.length; (i != 0 || result == false); i--)\n\t    result = result && (Sa[i].x == Sb[i].x && ...);\n\treturn result != false;\n      }\n\n     The inverse is written as:\n\t__builtin_memcmp(Sa.ptr, Sb.ptr, Sa.length * (*Sa.ptr).sizeof) != 0;\n     or:\n      {\n\tbool result = false;\n\tfor (i = Sa.length; (i != 0 || result != false); i--)\n\t    result = result || (Sa[i].x != Sb[i].x || ...);\n\treturn result == false;\n      }","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/369cb9b4c635dc206ce4863274c169752cc74a6a"},{"sha":"add5e8b1f7807a51bf6d8011e6be904c9f505f54","author":{"email":"1f80d93c3b141555a89d8fa91547a9eee1b6ee96@gdcproject.org","name":"Iain Buclaw"},"message":"Merge pull request #147 from ibuclaw/fillholes\n\nRemove 'memset' codegen in StructLiteralExp::toElem to fill alignment holes.","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/add5e8b1f7807a51bf6d8011e6be904c9f505f54"},{"sha":"1a47910c59e2a200171a066004f5a1889163381f","author":{"email":"1f80d93c3b141555a89d8fa91547a9eee1b6ee96@gdcproject.org","name":"Iain Buclaw"},"message":"Restore calling memset for union literals.\n\nAdd tests to ensure that both struct+union comparisons work as expected.","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/1a47910c59e2a200171a066004f5a1889163381f"},{"sha":"b1b1b3e3ee7ab2b5e88c0f0c6bcd6c1160f2228d","author":{"email":"1f80d93c3b141555a89d8fa91547a9eee1b6ee96@gdcproject.org","name":"Iain Buclaw"},"message":"Merge pull request #148 from ibuclaw/fillunions\n\nRestore calling memset for union literals.","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/b1b1b3e3ee7ab2b5e88c0f0c6bcd6c1160f2228d"},{"sha":"b956007ebf48c266f48f015e9299c46243b800ab","author":{"email":"65bc93790e5f2851b5e21a32141c9aebd0b6678a@gmail.com","name":"Johannes Pfau"},"message":"Merge branch 'master' into gdc-5","distinct":false,"url":"https://api.github.com/repos/D-Programming-GDC/GDC/commits/b956007ebf48c266f48f015e9299c46243b800ab"}]}