)]}'
{
  "commit": "b5f8171a1b955e07c13226d353f4ca53f75a0e8a",
  "tree": "ee5ec5faca7f0d2d43d989d9134938fb80037073",
  "parents": [
    "64e7a16fe4e8e16792aae1469f298ab658a13454"
  ],
  "author": {
    "name": "Richard Smith",
    "email": "richard-llvm@metafoo.co.uk",
    "time": "Mon Apr 30 05:25:48 2018 +0000"
  },
  "committer": {
    "name": "Richard Smith",
    "email": "richard-llvm@metafoo.co.uk",
    "time": "Mon Apr 30 05:25:48 2018 +0000"
  },
  "message": "PR37189 Fix incorrect end source location and spelling for a split \u0027\u003e\u003e\u0027 token.\n\nWhen a \u0027\u003e\u003e\u0027 token is split into two \u0027\u003e\u0027 tokens (in C++11 onwards), or (as an\nextension) when we do the same for other tokens starting with a \u0027\u003e\u0027, we can\u0027t\njust use a location pointing to the first \u0027\u003e\u0027 as the location of the split\ntoken, because that would result in our miscomputing the length and spelling\nfor the token. As a consequence, for example, a refactoring replacing \u0027A\u003cX\u003e\u0027\nwith something else would sometimes replace one character too many, and\nsimilarly diagnostics highlighting a template-id source range would highlight\none character too many.\n\nFix this by creating an expansion range covering the first character of the\n\u0027\u003e\u003e\u0027 token, whose spelling is \u0027\u003e\u0027. For this to work, we generalize the\nexpansion range of a macro FileID to be either a token range (the common case)\nor a character range (used in this new case).\n\nllvm-svn: 331155\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a83f95e7ae83644fd5bb03b71b3a2fd5a192920c",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/SourceLocation.h",
      "new_id": "4ca9340e80b75e291b8a350560152d656d7548d7",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/SourceLocation.h"
    },
    {
      "type": "modify",
      "old_id": "d6e9a9972cfd60c90d069feb04d88516bbb266d9",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Basic/SourceManager.h",
      "new_id": "55c138410d1d493bcd3e5270616838052e189f0c",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Basic/SourceManager.h"
    },
    {
      "type": "modify",
      "old_id": "d58849654cb8301e405a27fadf4c079cb24af586",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Lex/Lexer.h",
      "new_id": "15ef8300d0aac729fed26c79b4c991183b7adf7d",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Lex/Lexer.h"
    },
    {
      "type": "modify",
      "old_id": "630b87ced3588990dcba39f9344816792742f6c1",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Lex/Preprocessor.h",
      "new_id": "49d5da731a15ca7692a026f34051ce7287f1785c",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Lex/Preprocessor.h"
    },
    {
      "type": "modify",
      "old_id": "1fd7c7a3f84e243938316e7b8d790d7f9534c809",
      "old_mode": 33188,
      "old_path": "clang/include/clang/Rewrite/Core/HTMLRewrite.h",
      "new_id": "0f1f490d8305ae6ae22cc3102e0685baef9e334b",
      "new_mode": 33188,
      "new_path": "clang/include/clang/Rewrite/Core/HTMLRewrite.h"
    },
    {
      "type": "modify",
      "old_id": "9a51690c0ce7bb4cd3af30adb022844b5fe535d1",
      "old_mode": 33188,
      "old_path": "clang/lib/ARCMigrate/PlistReporter.cpp",
      "new_id": "2ad1c8591a9e5db372cff5a1c50d9c46649fb9a0",
      "new_mode": 33188,
      "new_path": "clang/lib/ARCMigrate/PlistReporter.cpp"
    },
    {
      "type": "modify",
      "old_id": "2ae6b78a463488870d740f81b7cf11644ace137d",
      "old_mode": 33188,
      "old_path": "clang/lib/ARCMigrate/TransGCAttrs.cpp",
      "new_id": "a8ca14b19bb89f155013d6dba0f75d7bfb0c76a7",
      "new_mode": 33188,
      "new_path": "clang/lib/ARCMigrate/TransGCAttrs.cpp"
    },
    {
      "type": "modify",
      "old_id": "7ca49558a7f099632ee20bfd9f2cfc9b43c3ee78",
      "old_mode": 33188,
      "old_path": "clang/lib/ARCMigrate/TransUnbridgedCasts.cpp",
      "new_id": "de52bef4d2060e004ad545b3f985388778e1cb49",
      "new_mode": 33188,
      "new_path": "clang/lib/ARCMigrate/TransUnbridgedCasts.cpp"
    },
    {
      "type": "modify",
      "old_id": "4f3fb58459257d635d7973b96e21fc0de10f7b27",
      "old_mode": 33188,
      "old_path": "clang/lib/ARCMigrate/TransformActions.cpp",
      "new_id": "7439eb285943042659e919ff78222f3af7008ece",
      "new_mode": 33188,
      "new_path": "clang/lib/ARCMigrate/TransformActions.cpp"
    },
    {
      "type": "modify",
      "old_id": "71f74e4d1aee168236d868e2871af1f4c561de75",
      "old_mode": 33188,
      "old_path": "clang/lib/Basic/SourceLocation.cpp",
      "new_id": "fef1f44fc8a503a318c290382047345caaeabb55",
      "new_mode": 33188,
      "new_path": "clang/lib/Basic/SourceLocation.cpp"
    },
    {
      "type": "modify",
      "old_id": "3df2015bfe54fc8c499b939bb92681a66b476ef3",
      "old_mode": 33188,
      "old_path": "clang/lib/Basic/SourceManager.cpp",
      "new_id": "d5e71e9363d6542e8111be35be1131de42c13e9a",
      "new_mode": 33188,
      "new_path": "clang/lib/Basic/SourceManager.cpp"
    },
    {
      "type": "modify",
      "old_id": "c8a32d4f28e175b03356e3ad2874e7ca573269ae",
      "old_mode": 33188,
      "old_path": "clang/lib/CodeGen/CoverageMappingGen.cpp",
      "new_id": "97139ef69bcffbaa727be7d0c5567906a3a40f42",
      "new_mode": 33188,
      "new_path": "clang/lib/CodeGen/CoverageMappingGen.cpp"
    },
    {
      "type": "modify",
      "old_id": "0ff2447f77a5214fc995f149f8d08a05f5e3a530",
      "old_mode": 33188,
      "old_path": "clang/lib/Edit/EditedSource.cpp",
      "new_id": "89a3eb40d083aa291d05bcef6170a6da1724dd9f",
      "new_mode": 33188,
      "new_path": "clang/lib/Edit/EditedSource.cpp"
    },
    {
      "type": "modify",
      "old_id": "8b607a631984349c782bb768783f22aad6b43d13",
      "old_mode": 33188,
      "old_path": "clang/lib/Frontend/DiagnosticRenderer.cpp",
      "new_id": "a3bcaf47fa6328be0ae85c41927212f168bc2cb3",
      "new_mode": 33188,
      "new_path": "clang/lib/Frontend/DiagnosticRenderer.cpp"
    },
    {
      "type": "modify",
      "old_id": "6a72b00c602b9458269cfb4fcbd37909c37a6529",
      "old_mode": 33188,
      "old_path": "clang/lib/Frontend/TextDiagnostic.cpp",
      "new_id": "9bda79a276f1592bbfb90721f40ff191f64f5320",
      "new_mode": 33188,
      "new_path": "clang/lib/Frontend/TextDiagnostic.cpp"
    },
    {
      "type": "modify",
      "old_id": "9179650187e3415b6b3b58d612de0e3748927f26",
      "old_mode": 33188,
      "old_path": "clang/lib/Lex/Lexer.cpp",
      "new_id": "e9478d603a5241299b8b61bde44054458cd5c42b",
      "new_mode": 33188,
      "new_path": "clang/lib/Lex/Lexer.cpp"
    },
    {
      "type": "modify",
      "old_id": "e1a0438d1ddd245f7cba2d8b66b1a78022cdd3c4",
      "old_mode": 33188,
      "old_path": "clang/lib/Lex/PPDirectives.cpp",
      "new_id": "31c8e130c8b916252b3637ffac0516edc40740b8",
      "new_mode": 33188,
      "new_path": "clang/lib/Lex/PPDirectives.cpp"
    },
    {
      "type": "modify",
      "old_id": "aa8414f8589be3bf765ed6465216152e14d84503",
      "old_mode": 33188,
      "old_path": "clang/lib/Lex/PPMacroExpansion.cpp",
      "new_id": "edf508a79b3ca258f7c94bc418941fcb585a9d0c",
      "new_mode": 33188,
      "new_path": "clang/lib/Lex/PPMacroExpansion.cpp"
    },
    {
      "type": "modify",
      "old_id": "4370bc10e348945908c57e40c1a69888a233ee29",
      "old_mode": 33188,
      "old_path": "clang/lib/Lex/Preprocessor.cpp",
      "new_id": "94490bdf3fbfeb46bb0f155f422ecf6109c43557",
      "new_mode": 33188,
      "new_path": "clang/lib/Lex/Preprocessor.cpp"
    },
    {
      "type": "modify",
      "old_id": "6bf0b84e59050c6d07bb5756491cc5c08e45a694",
      "old_mode": 33188,
      "old_path": "clang/lib/Lex/TokenLexer.cpp",
      "new_id": "724ccb393837947ad0ac566657578ee53770df97",
      "new_mode": 33188,
      "new_path": "clang/lib/Lex/TokenLexer.cpp"
    },
    {
      "type": "modify",
      "old_id": "88a5745350d6d45da1b7ea0e4f2989309af926e7",
      "old_mode": 33188,
      "old_path": "clang/lib/Parse/ParseTemplate.cpp",
      "new_id": "d089b245dffef3c687014c6e25719dbf5928944a",
      "new_mode": 33188,
      "new_path": "clang/lib/Parse/ParseTemplate.cpp"
    },
    {
      "type": "modify",
      "old_id": "3a086537b4a95ba7aee9dd2c43663fe4623ec8d5",
      "old_mode": 33188,
      "old_path": "clang/lib/Rewrite/HTMLRewrite.cpp",
      "new_id": "d93961f3582eca64b39899f46a02203567b85e42",
      "new_mode": 33188,
      "new_path": "clang/lib/Rewrite/HTMLRewrite.cpp"
    },
    {
      "type": "modify",
      "old_id": "9e7f5cae28789951c38d127d100a9a38da056be3",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaChecking.cpp",
      "new_id": "7b386122414885722b5f7d42e870be068f1bb728",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaChecking.cpp"
    },
    {
      "type": "modify",
      "old_id": "74a79252792fb4868c7b56ff6b5ade767f152a82",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaDeclAttr.cpp",
      "new_id": "fd1cfc14d87526521be1eb9bb79d3d2a13f6e2f8",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaDeclAttr.cpp"
    },
    {
      "type": "modify",
      "old_id": "678f6af068ec1d86939fd3478d8acd8604a4c3bc",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaDeclCXX.cpp",
      "new_id": "2cf16221f75573e7d065e7bbde085ae7100fc853",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaDeclCXX.cpp"
    },
    {
      "type": "modify",
      "old_id": "cf98805ebd8baa4c21fe73bd14f036aa339e32c5",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaInit.cpp",
      "new_id": "e44eaa5162a32ba2ae3c094b628920be5f249318",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaInit.cpp"
    },
    {
      "type": "modify",
      "old_id": "52a3d75bfb9b9cea596d7776795166cd85a29a94",
      "old_mode": 33188,
      "old_path": "clang/lib/Sema/SemaType.cpp",
      "new_id": "0e71047f00e65a852c4903522ecb16dee1c5268c",
      "new_mode": 33188,
      "new_path": "clang/lib/Sema/SemaType.cpp"
    },
    {
      "type": "modify",
      "old_id": "9d10b9ebfbb8adcbfe84339466f4541771517947",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTReader.cpp",
      "new_id": "a1de22b68ecb14b5e15061337bc7bf62569daef4",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTReader.cpp"
    },
    {
      "type": "modify",
      "old_id": "7f2b1861d11100d8baa638e6e0728d0a9c119291",
      "old_mode": 33188,
      "old_path": "clang/lib/Serialization/ASTWriter.cpp",
      "new_id": "fb7276b2f8d3a7383731d039ecd1d09f197e1406",
      "new_mode": 33188,
      "new_path": "clang/lib/Serialization/ASTWriter.cpp"
    },
    {
      "type": "modify",
      "old_id": "c8289a7088422185e87d27197c4c24dd0e5c77f7",
      "old_mode": 33188,
      "old_path": "clang/lib/StaticAnalyzer/Core/BugReporter.cpp",
      "new_id": "3a909564b2d393d02580064ce225e9ed3dd4f06c",
      "new_mode": 33188,
      "new_path": "clang/lib/StaticAnalyzer/Core/BugReporter.cpp"
    },
    {
      "type": "modify",
      "old_id": "78d6ecdbc375e83faa5c728412345af4ce9e853e",
      "old_mode": 33188,
      "old_path": "clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp",
      "new_id": "e171807d36bf88317f7d486f92e79735421073d5",
      "new_mode": 33188,
      "new_path": "clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9110838cf3f5ad9a526bd66b009645a27160ddd8",
      "new_mode": 33188,
      "new_path": "clang/test/Misc/diag-greatergreater.cpp"
    },
    {
      "type": "modify",
      "old_id": "1eaf84a471e24d12e6fffc17fdef6d067eb66fb0",
      "old_mode": 33188,
      "old_path": "clang/test/Parser/cxx0x-decl.cpp",
      "new_id": "7bd82e8220becc1ba85a515a3f9da4b18eeec4c5",
      "new_mode": 33188,
      "new_path": "clang/test/Parser/cxx0x-decl.cpp"
    },
    {
      "type": "modify",
      "old_id": "380723108cedb335f8056141d0cfecd12edcc625",
      "old_mode": 33188,
      "old_path": "clang/tools/libclang/CIndex.cpp",
      "new_id": "64e14351f1cd07e6ba3c97e63e8e3096d611f4e9",
      "new_mode": 33188,
      "new_path": "clang/tools/libclang/CIndex.cpp"
    },
    {
      "type": "modify",
      "old_id": "216672a90d5efcab883d5cb9e86f7701679a9389",
      "old_mode": 33188,
      "old_path": "clang/unittests/Lex/LexerTest.cpp",
      "new_id": "c913062a7abf6e96b83160ace41859011154184c",
      "new_mode": 33188,
      "new_path": "clang/unittests/Lex/LexerTest.cpp"
    }
  ]
}
