)]}'
{
  "commit": "a943613e4060fd19258e4ae82491af8f98d5e2a1",
  "tree": "bb09e41fa9a26650f636680cddb873534611a881",
  "parents": [
    "7c3ce519e80122fa3ba326dc0aa5c8576ccd1250"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Sun Sep 23 18:36:01 2018 -0500"
  },
  "committer": {
    "name": "CQ bot account: commit-bot@chromium.org",
    "email": "commit-bot@chromium.org",
    "time": "Mon Oct 01 22:57:00 2018 +0000"
  },
  "message": "Inline functions are apparently really complicated.\n\nC and C++ handle inline functions differently. In C++, an inline function is\ndefined in just the header file, potentially emitted in multiple compilation\nunits (in cases the compiler did not inline), but each copy must be identical\nto satsify ODR. In C, a non-static inline must be manually emitted in exactly\none compilation unit with a separate extern inline declaration.\n\nIn both languages, exported inline functions referencing file-local symbols are\nproblematic. C forbids this altogether (though GCC and Clang seem not to\nenforce it). It works in C++, but ODR requires the definitions be identical,\nincluding all names in the definitions resolving to the \"same entity\". In\npractice, this is unlikely to be a problem, but an inline function that returns\na pointer to a file-local symbol could compile oddly.\n\nHistorically, we used static inline in headers. However, to satisfy ODR, use\nplain inline in C++, to allow inline consumer functions to call our header\nfunctions. Plain inline would also work better with C99 inline, but that is not\nused much in practice, extern inline is tedious, and there are conflicts with\nthe old gnu89 model: https://stackoverflow.com/questions/216510/extern-inline\n\nFor dual C/C++ code, use a macro to dispatch between these. For C++-only\ncode, stop using static inline and just use plain inline.\n\nUpdate-Note: If you see weird C++ compile or link failures in header\n    functions, this change is probably to blame. Though this change\n    doesn\u0027t affect C and non-static inline is extremely common in C++,\n    so I would expect this to be fine.\n\nChange-Id: Ibb0bf8ff57143fc14e10342854e467f85a5e4a82\nReviewed-on: https://boringssl-review.googlesource.com/32116\nCommit-Queue: David Benjamin \u003cdavidben@google.com\u003e\nCQ-Verified: CQ bot account: commit-bot@chromium.org \u003ccommit-bot@chromium.org\u003e\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "10f6e413f13496487a09df64ef5f54bade485c39",
      "old_mode": 33188,
      "old_path": "include/openssl/base.h",
      "new_id": "5a4bb66708b0a90a8d6f14c4155a99e961a6be4f",
      "new_mode": 33188,
      "new_path": "include/openssl/base.h"
    },
    {
      "type": "modify",
      "old_id": "bb847f969669075a134b84a04fb5a1c0623a2229",
      "old_mode": 33188,
      "old_path": "include/openssl/cpu.h",
      "new_id": "b2759fed10831f1b0181e17230e889142ec7d954",
      "new_mode": 33188,
      "new_path": "include/openssl/cpu.h"
    },
    {
      "type": "modify",
      "old_id": "82869cf97333d29b8702beb57a5ef439f0b1dadd",
      "old_mode": 33188,
      "old_path": "include/openssl/stack.h",
      "new_id": "7feeceeda1f723cc825e217df85d078bfb2c3f35",
      "new_mode": 33188,
      "new_path": "include/openssl/stack.h"
    }
  ]
}
