)]}'
{
  "log": [
    {
      "commit": "60a1ee966545192a6dffcd34ec6b6d5c7b41c11a",
      "tree": "68cda5d5e6e14da8e06747f203aee78320f1e310",
      "parents": [
        "2ce7767d3285c67a596f8e1673e7163e86ff2223"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:15 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "substitute(): convert switch() into cascade of ifs\n\nAgain, better code generation that way (and I\u0027d like to use likely()\nhere); it *is* in a very hot loop.\n\nReorder the TOKEN_... a bit (move TOKEN_UNTAINT up, so that it\u0027s less than\nTOKEN_MACRO_ARGUMENT) to get the default (and by far the most common case)\nvia single comparison.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "2ce7767d3285c67a596f8e1673e7163e86ff2223",
      "tree": "c394c8f74c6dabb30f7b0a9bde70e051cbcb5c76",
      "parents": [
        "c4379915d3a9374c7f1965381e3b85f29f4d4e8e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:14 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "make expand_one_symbol() inline\n\nbetter code generation that way...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "c4379915d3a9374c7f1965381e3b85f29f4d4e8e",
      "tree": "1ffd8211a3a87528044ba186f86835162066dbb1",
      "parents": [
        "4dae3e04c110c7737db129f8083f77131d116e56"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:13 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "simplify the calling conventions of collect_arguments()\n\nCurrently we call that only after having verified that macro name is\nfollowed by the (, with those two tokens passed as separate arguments.\nWhat\u0027s more, collect_arguments() already can tell the caller \"don\u0027t\nexpand that\" if the arguments are malformed, so there\u0027s no reason not to\nmove the check for opening parenthesis into collect_arguments() - that\nmakes the calling conventions simpler and it does not incur any cost -\ncollect_arguments() is going to be inlined into its sole caller anyway.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "4dae3e04c110c7737db129f8083f77131d116e56",
      "tree": "67a3894d64aa5fa2f27daf7b95d3dcbf63b53d06",
      "parents": [
        "ae58ca73f2eb518288e43e3824b5181caf2e72a8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:12 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "merge(): saner handling of -\u003enoexpand\n\nWe only care about noexpand for identifiers and solitary #; the latter\ncan\u0027t occur in merge(), the former should just get -\u003enoexpand set\naccording to -\u003eident-\u003etainted.  That eliminates the last remaining\npossibility of having expand() run into a token that has tainted\nidentifier - the regular noexpand check in the caller is sufficient now.\nShould\u0027ve done that all way back in 2004...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "ae58ca73f2eb518288e43e3824b5181caf2e72a8",
      "tree": "71a1e2fb7eb3e878420eaa7e997fcb54b0114b5f",
      "parents": [
        "1a9a98e3c7b82778c32e321a7cc3e5bfc5f95d6f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:11 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "expansion-time va_opt handling\n\nTeach the interpreter (\u003d\u003d substitute()) to handle TOKEN_VA_OPT and\nTOKEN_VA_OPT_STR.\n\nTwo tricky parts, both related to calculating when an argument can be\nconsumed.  One is that in situation like\n\t#define A(x,...) __VA_OPT__(x) foo_##x x\nwe might end up doing expansion of x either at the 1st occurrence (inside\n__VA_OPT__) or at the 1st one _not_ inside __VA_OPT__ (the 3rd one in\nin this example).  So at parsing time we need to keep track of whether\nwe\u0027d already seen an unconditional use of expanded form and similarly\nfor stringified one.\n\tAnother is that getting to the first __VA_OPT__ means that\nwe need to find out whether the expanded form of __VA_ARGS__ is empty.\nIf there\u0027d been a prior expanding occurrence of __VA_ARGS__, we are\nfine; if there hadn\u0027t, we need to make sure that unexpanded form\nsurvives at least until that point.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "1a9a98e3c7b82778c32e321a7cc3e5bfc5f95d6f",
      "tree": "b1f734492b5ecdf3713d56b32cc49a555521b970",
      "parents": [
        "95629d528974472e930cafa5eb2f61f6af214e46"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:10 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "__VA_OPT__: parsing\n\nva-opt-replacement can occur in any place where a macro argument of a\nvararg macro might.  It consists of identifier __VA_OPT__, followed by\n\u0027(\u0027, a sequence of pp-tokens with balanced parentheses (body of that\nva-opt-replacement) and finally a \u0027)\u0027.\n\nBody of va-opt-replacement may not contain __VA_OPT__ and may not begin\nor end with a ##.\n\nAt the expansion time va-opt-replacement is handled at the same stage as\nargument substitution.  What happens depends upon the value of __VA_ARGS__\n- if it would expand to an empty token sequence, each va-opt-replacement\nin the body is treated the same way as an occurrence of an empty argument\n(replaced by an empty string literal if preceded by a # operator and by\nplacemarker token otherwise).\n\nIf __VA_ARGS__ does *not* expand to an empty token sequence, the body of\nva-opt-replacement is subjected to argument substitution and # processing,\nas if it had been the entire macro body.  Leading and trailing whitespace\nis stripped from the result.  If va-opt-replacement is not preceded by\na # operator, the resulting list is substituted in its place.  If it\n*is* preceded by a # operator, the resulting list is subjected to ##\nprocessing/placemarker removal and converted into a string literal token.\nThat token is substituted in place of # va-opt-replacement combination.\n\nAll of that is followed by usual processing of remaining ## operators and\nplacemarker removal (we are, of course, allowed to calculate the individual\ntoken concatenations earlier, provided that end result is the same).\n\nFor non-stringified instances it\u0027s _almost_ the same as if all\nva-opt-replacements had been replaced with their bodies in case when\n__VA_ARGS__ expands to non-empty sequence of tokens; the only difference\nis that ## next to va-opt-replacement does not suppress expansion of\narguments inside; for example\n\t#define FOO BAR\n\t#define A(X) X ## 1\t\t\t// X is not expanded\n\t#define B(X,...) __VA_OPT__(X) ## 1\t// X is expanded\n\tA(FOO)\n\tB(FOO,_)\n\tB(FOO)\nyields\n\tFOO1\n\tBAR1\n\t1\nAny ## inside the va-opt-replacement still have the usual effect on the\nadjacent macro arguments.\n\nIn other words, for non-stringified __VA_OPT__ we can simply\n\t* parse its body as if it had been an entire macro (with the\nusual handling of arguments)\n\t* when substitute() gets to va-opt-replacement, check if expansion\nof __VA_ARGS__ is empty\n\t* if it is, just do what we do when seeing an empty argument,\notherwise switch to taking tokens to interpret from the body of that\nva-opt-replacement until we reach its end, then proceed to interpret\nthe rest of the body of our macro.\n\nFor stringified __VA_OPT__ we need to save the state of interpreter (body,\nlist, state), switch to (body of va-opt-replacement, private list, Normal)\nand once we are done stringify the private list, restore the saved state\nand add the string token we\u0027ve got to the main list, same as usual.\n\nNote on whitespace handling: whitespace in front of the first token\ncoming from va-opt-replacement is _not_ affected by whatever whitespace\nwe might have between __VA_OPT__ and \u0027(\u0027 or \u0027(\u0027 and the body; only\nthe whitespace preceding the __VA_OPT__ itself matters.\n\nRepresentation:\n\n* new token types: TOKEN_VA_OPT and TOKEN_VA_OPT_STR; va-opt-replacement\nand # va-opt-replacement resp. get converted to that, with the body +\nsurrounding parentheses stripped from the list and reference to the\nopening parenthesis stored into -\u003eva_opt_linkage of the converted __VA_OPT__\ntoken.\n\nClosing parenthesis is converted to TOKEN_VA_OPT; its -\u003enext points to\neof_token_entry to make it distinguishable from the normal TOKEN_VA_OPT\nand its -\u003eva_opt_linkage points back to the originating TOKEN_VA_OPT or\nTOKEN_VA_OPT_STR - basically, that will serve as return instruction.\nWe could add a separate token type for that, but that would only make\nthings more inconvenient at expansion time.\n\nNote that in all cases -\u003eva_opt_linkage points to the token immediately\npreceding the ones we should proceed to; that will simplify life at\nexpansion time.\n\nThis commit contains the parser side of the things.  Substitution side\nis done in the next one.\n\n* check_arg() taught to recognize and parse __VA_OPT__(...); returns -1\non failure and 0 (not an argument of macro) on success.  Callers updated.\n\n* dump_macro() and token_list_different() taught to handle those.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "95629d528974472e930cafa5eb2f61f6af214e46",
      "tree": "7e8a1c7fb1d3e4f9b320b1b27c46ba0bef75f579",
      "parents": [
        "8a7fbca4098c7b1bf586d8635185f30e82b292ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:09 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "pre-process.c: split try_arg()\n\nmore __VA_OPT__ preparations - we want to split the \"parse the possible\nvariable\" from the parts that are sensitive to the kind of variable\naccess (in particular, to subsequent ## being or not being there).\nWith __VA_OPT__ we\u0027ll have a possibility of relevant ## being a lot\nfurther ahead than the next token and we won\u0027t find it until we\u0027d parsed\nthe entire __VA_OPT__(.....).\n\nWe could check for __VA_OPT__ _before_ checking for arguments, but that\nends up screwing code generation a lot, slowing down the normal case\nwhere we\u0027ve not a single __VA_OPT__ in the input.\n\nReplace try_arg() with two new primitives:\n\t* check_arg() - returns 0 if the next token is not an argument;\nif the token is an argument, it gets converted to TOKEN_MACRO_ARGUMENT and\nslot number + 1 is returned.  That function gets only token and arg_state\narray - \u0027kind\u0027 is not known yet.  At the moment \u0027args\u0027 is not needed,\nbut it will be needed for __VA_OPT__ handling, so that argument stays.\nNote that unlike try_arg() we don\u0027t need a special return value to tell\nvararg from non-vararg argument - the slot number is sufficient now.\nIt\u0027s a vararg if and only if it occupies slot 0, i.e. if check_arg()\nhas returned 1.\n\t* seen_arg() - gets called only for TOKEN_MACRO_ARGUMENT token,\ndoes the rest of what try_arg() used to do.  Returns void.\n\nCalls of try_arg() are replaced with combinations of these two, the\nfirst try_arg() in handle_hashhash() lifted into the only caller of\nhandle_hashhash() and its check_arg() folded with the one we do for non-##\ncase there.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "8a7fbca4098c7b1bf586d8635185f30e82b292ed",
      "tree": "11f5f9bcaeaff81f1d915f6b1b2cf8b30eafc34e",
      "parents": [
        "be4532e51ec8e32c61cbb27308faf18c3b0f49e1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:08 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "preparations for __VA_OPT__ support: reshuffle argument slot assignments\n\nMove the vararg to slot 0, with the non-vararg arguments in slots\n1..fixed_args; for macros with vararg arguments leave slot 0 unused.\n\nRationale: handling of __VA_OPT__ at expansion time will need to locate\nthe vararg; having it always in the same slot makes life easier.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "be4532e51ec8e32c61cbb27308faf18c3b0f49e1",
      "tree": "ae6460cdb7aee4099898963c12b8e06918592efd",
      "parents": [
        "a5dadf62df02232719dc7fede5eb5eee318d2c3a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:07 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "deal with ## on arguments separately\n\nAdding/concatenating the chunks to growing expansion is done in the end\nof loop body in substitute(); preceding switch leaves the data for it in\ntwo variables - \u0027added\u0027 is the first token of the next chunk and \u0027tail\u0027\npoints to the forward pointer in the last token of that chunk.\n\nThe only case when we might be adding more than one token is macro\nargument; forcing it to use the same path as everything else complicates\nthings for no good reason, especially when it comes to concatenation.\n\nLet the TOKEN_MACRO_ARGUMENT case deal with that stuff on its own.\nIn case of concatenation let it merge the first token before\ncopying/inserting the rest; that simplifies the common case and it\nsimplifies the data flow for everyone since we don\u0027t need to bother with\n\u0027tail\u0027 anymore.\n\nAs a side benefit, merge() is no longer inlined, which reduces the spills.\n\nThat chunk could go after __VA_OPT__ handling, but having it done first\nsimplifies the things for __VA_OPT__ (and especially for #__VA_OPT__()),\nso let\u0027s put that one first.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "a5dadf62df02232719dc7fede5eb5eee318d2c3a",
      "tree": "f4928d421d880e8a897285c148fcf655689cc935",
      "parents": [
        "8d1cbfd266133f308f44a07ea81c2f736c1de342"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:06 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "stop mangling arglist, get rid of TOKEN_ARG_COUNT\n\nNow it can be done - we no longer store the counters in arglist, so\nthere\u0027s no reason to mangle it.  Just have it return the pointer to\nclosing ) on success and let the caller split the list at that point.\nSimplifies both the parse_arguments() and dump_macro() and fixes\na bug in the latter - pre-C99 gcc vararg macros used to lose ... in\n-dM output.  They did work correctly, but dump_macro() output had\nproduced #define A(X,Y) instead of correct #define A(X,Y...)\nTestcase added.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "8d1cbfd266133f308f44a07ea81c2f736c1de342",
      "tree": "e4d97905fdeb86a950ae9f06a75b77c3920bc25d",
      "parents": [
        "68154239ba36731a52de816125b3351ae0b3dd3e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:05 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "kill create_arglist()\n\nwe don\u0027t need the fake arglist for __has_extension() and its ilk anymore;\njust set the -\u003earglist to \u0026eof_token_entry to indicate that arguments\nare expected and set -\u003efixed_args and -\u003evararg to tell how much.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "68154239ba36731a52de816125b3351ae0b3dd3e",
      "tree": "3259cfb9a2adc979c894da59e2e5cbefa2a45d3f",
      "parents": [
        "7a9504d91a55af642d527e5a92f68982c93fd797"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:04 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "on-demand argument expansion\n\nInstead of calculating expanded and stringified forms of arguments before\nwe get to interpolating them into the body, do that on demand.\n\nThere are several subtle points involved:\n\n\t* array of arguments (\u0027args\u0027 in collect_arguments() and friends)\nneeds to be explicitly zeroed; then we can easily see whether we\u0027d\nalready expanded or stringified the sucker.  Better done as an explicit\nmemset(), and it\u0027s better off in collect_arguments() than in expand()\nitself - that way we don\u0027t need to bother with that for macros that\ndon\u0027t have arguments in the first place.  And yes, doing that as an\nempty initializer in expand() where that VLA is declared does result in\na measurable slowdown...\n\n\t* anti-recursion rules do not apply to argument expansion;\nsomething like\n\t#define A(x) x + 1\n\tA(A(1))\nshould result in x + 1 + 1, not A(1) + 1.  If expansion is done before\nwe mark \u0027A\u0027 and call substitute() that happens automatically; if we\ndelay it until substitute() runs into the first normal instance of an\nargument, we need to remove the mark for duration of that expansion.\nNot a problem, fortunately, since the set of marked symbols at the time\nwe get to TOKEN_MACRO_ARGUMENT will be the same as it used to be at the\ntime we enter substitute() - arguments can\u0027t contain any TOKEN_UNTAINT\n(collect_arg() would eat all of those) and any taint added during\nexpand_list() will come with matching TOKEN_UNTAINT inserted into the\nlist.  All such TOKEN_UNTAINT will be consumed before expand_list()\nreturns, restoring the original conditions.  All we need to do is to\nremove the taint from macro being substituted just before expanding an\nargument and restore it right after that - it will do the right thing.\nIt makes sense to shift setting the taint from the caller of substitute()\nwhere it\u0027s currently done into the very beginning of substitute() itself,\nwhile we are at it.\n\n\t* instead of using counters to determine if this form of argument\nis not needed after this place just mark the last place where given\nform is needed when we are parsing the body - it\u0027s easy enough to do.\nThe only subtlety here is that unexpanded argument is needed to calculate\nan expanded form, so in\n\t#define A(x) foo_##x \u003d x\nwe can\u0027t cannibalize the unexpanded form of x until the second instance of\nx in the body.  Rules for unexpanded form are\n\t1) it\u0027s needed for any unexpanded occurrence (obviously)\n\t2) it\u0027s needed for the first expanded occurrence\n\t3) it\u0027s needed for the first stringified occurrence\nFortunately, we don\u0027t need nothing non-trivial at #define time - no\nseparate passes, etc.  Note that in real world most of the macros seen\nin given compile unit are never expanded in it, so we need to keep the\nhandling of #define light - trading the overhead at expansion time for\noverhead at definition time is a bad idea.\n\n\t* since the counters are gone, we no longer need to pass arglist\nall over the place; parsing side gets an array of struct arg_state,\nwhich is where we keep the information about argument occurrences\nthrough the parsing.  Expansion side doesn\u0027t need arglist anymore -\nthe last place that used to need it was collect_arguments(), and only\nto copy the counters.  No more of that...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "7a9504d91a55af642d527e5a92f68982c93fd797",
      "tree": "5682c0cbe21b725d4a96935f1ebb7a7a7fa558ea",
      "parents": [
        "e2981710acaa80d7515f11649ba0415f550c6fba"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:03 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "steal 2 bits from argnum for argument kind\n\nWe have 3 separate token types (TOKEN_{MACRO,QUOTED,STR}_ARGUMENT),\nwith fairly similar handling at expansion time.  Let\u0027s steal two bits\nfrom -\u003eargnum and use them to represent the kind of occurrence; that\nsimplifies substitute() and allows for better code generation there.\n\nThe object we use to store the argument state at expansion time (struct\narg) is already a structure with 3 pointers to token lists (unexpanded,\nexpanded and stringified forms of the argument) and 3 integer counters -\nthe number of remaining occurrencies of each kind.  Gather those into\n3-element arrays indexed by the kind; counts will be gone soon, token\nlists will remain.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "e2981710acaa80d7515f11649ba0415f550c6fba",
      "tree": "9b3309a9e846f30e588e0beb2a7e7f5ab02220e9",
      "parents": [
        "0fd79c7bb36f2ea8569eee36cf2e94514d41e464"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:02 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "preparing to change argument number encoding for TOKEN_..._ARGUMENT\n\nWe want to steal some bits from TOKEN_..._ARGUMENT; it\u0027s not a problem,\nseeing that payload is a 32bit number and we are *not* going to support\nmany millions of arguments in macros.  For now, wrap the accesses into\nan inline helper (argnum(token)), to reduce the amount of noise in\nsubsequent patches.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "0fd79c7bb36f2ea8569eee36cf2e94514d41e464",
      "tree": "c040b7a28bdc4fa1a3247d49d32a5ed331368332",
      "parents": [
        "890100631add1465f2db823ad3b2bbe94de26302"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:01 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "make expand_has_...() responsible for expanding its argument\n\nIf we want to make expansion of arguments on-demand, we need to adjust\n-\u003eexpand() calling conventions first, passing it unexpanded arguments.\nSwitch create_arglist() to setting argcounts from normal\u003d1 to quoted\u003d1,\nprovide a helper (first_arg()) that does actual expansion and make\n-\u003eexpand() instances use it.  After that these fake arglists are used\nonly for two things: they indicate that these macros are function-like\nand they short-circuit expand_arguments().  Once we switch to on-demand\nargument expansion, the second role will disappear and we can just use\n\u0026eof_token_entry as -\u003earglist for those.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "890100631add1465f2db823ad3b2bbe94de26302",
      "tree": "e88c197856709dd39b86faabc7dd762e20f795eb",
      "parents": [
        "9e16f82b77be5d1b187b5724e4a7826ecb46202a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:04:00 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "try_arg(): don\u0027t use arglist for argument name lookups\n\nJust store them into a global array and search there.  That allows to\nget rid of mangling ... in the arglist along with the is_VA_ARGS_token()\nkludge.  For now we still need to access the arglist in try_arg(),\nbut that\u0027s going away as soon as we get rid of the use counters...\n\nAdded a check for duplicate argument names, while we are at it - we\ndidn\u0027t do that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "9e16f82b77be5d1b187b5724e4a7826ecb46202a",
      "tree": "20e3173063ab48599497a760c4d142d558b7e05d",
      "parents": [
        "4916ae3735d666ea31cc652e6a16a409dc50a16a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:03:59 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "simplify collect_arguments() and fix error handling there\n\nThe current logics is too convoluted.  We use collect_arg() to carve\nan argument out; it takes a pointer to previous token (either opening\nparenthesis or comma), finds how far does the argument extend, cuts the\nlist at its end and returns the token that follows it (normally either\nclosing parenthesis or the comma).  collect_arg() is told whether we\nwant a vararg argument or not - the difference is that normal arguments\nterminate on commas.\n\nWhen macro has N non-vararg arguments and V (0 or 1) vararg ones, we want\n\t* N calls of collect_arg() asking for non-vararg arguments;\nall but the last one must be followed by commas.  The last one may be\nfollowed either by comma or by closing parenthesis.\n\t* If we have seen exactly N commas, call collect_arg() asking\nto collect everything until the closing parenthesis.  That will get us\nto the end of arguments.\n\nThe only potential gotcha is that there is a case when \"exactly N commas\"\nfor non-vararg macro does _not_ mean excessive arguments - N \u003d V \u003d 0.\nNot hard to account for - in that case we must look at the chunk carved\nout by the last (and only) call of collect_arg(); that would be everything\nbetween the parentheses.  If it\u0027s empty, we are fine, otherwise we\u0027ve\nexcessive arguments.\n\nRather than trying to fold all of that into a single loop, separate\nthe handling of non-vararg arguments from the rest; the logics becomes\nsimpler that way, especially around the error recovery.\n\nAs a side benefit the \u0027vararg\u0027 bit in struct argcount becomes unused\nand can be removed.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "4916ae3735d666ea31cc652e6a16a409dc50a16a",
      "tree": "022be28e51837446e320e97254e79e2f7e60423d",
      "parents": [
        "7dbe961adbfce428973c933191c06b462e0c43d2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:03:58 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "parsing #define: saner handling of argument count, part 1\n\nMangling arglist the way we do is a bad kludge and it limits what we\ncan do both at parsing a macro definition and at expansion time.\n\nWe use it to\n\t* store the number of arguments (gets stashed in the cannibalized\ntoken of opening parenthesis)\n\t* store the number of times each argument is used expanded,\nunexpanded and stringified (stashed in cannibalized token of comma or\nclosing parenthesis that follows an argument)\n\t* mark the vararg argument (ditto)\n\nTotal number of arguments would be better off in struct symbol, next\nto arglist.  As the matter of fact, we\u0027d be better off with number of\nnon-vararg arguments and \"is there a vararg\" stored separately.\n\nNumber of times each argument occurs expanded, etc. is used to find if\ngiven occurrence of argument in the body is the last one of given sort\n- by counting down as we process the body during expansion, no less.\nEach counter runs down at the same token of the body every time we expand\nthe macro, and we can just as easily mark those tokens when we parse the\ndefinition.  It is also used to tell whether we need to expand and/or\nstringify the argument in the first place.  Again, easily expressed\nas marking the tokens and we can easily steal bits for TOKEN_..._ARG\npayload - we have a 32bit value that represents the argument\u0027s number.\n\n\"Is it a vararg argument\" flag is used both at definition parsing time\n(when we would be better off with \"the index of vararg argument or -1\nif there\u0027s none\") and at expansion time, when we collect the arguments.\nThere we pass those values to collect_argument(), telling it whether it\nshould stop on (unprotected) commas.  The current logics is seriously\nconvoluted, especially around the error recovery.  Untangling that ends\nup with a variant that wants to know the number of non-vararg arguments\nalong with \"do we have a vararg at all\" flag, upfront and not scattered\nthrough the arglist.\n\nAs the first step, introduce sym-\u003efixed_args and sym-\u003evararg and have\nthem calculated when we parse a macro definition; stop storing the number\nof arguments in the first token of arglist.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "7dbe961adbfce428973c933191c06b462e0c43d2",
      "tree": "ca243949c8b14360e489021e8026ce8abca0472d",
      "parents": [
        "4220a396bfa97c91de01449a1657dec261d44a60"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:03:57 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:42:31 2026 -0700"
      },
      "message": "more dup_token() optimizations\n\npull handling to tainted identifiers into dup_token(), eliminating reread\nand resulting stall in there.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "4220a396bfa97c91de01449a1657dec261d44a60",
      "tree": "90a123ac21f6e64a35efe4cdc1c155f193807960",
      "parents": [
        "f07dc8c043837fc7357b6c1fd10308189e2e5eb4"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:03:56 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:38:04 2026 -0700"
      },
      "message": "expand and simplify the call of dup_token() in copy()\n\nreducing -\u003epos handling helps there\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "f07dc8c043837fc7357b6c1fd10308189e2e5eb4",
      "tree": "71d6710d650fc43218876cb06c52cc71f688f154",
      "parents": [
        "37156835e3d725b6d750f000be33ba3814bb2310"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 16 07:03:55 2026 +0000"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Mon Mar 16 10:37:57 2026 -0700"
      },
      "message": "split copy() into \"need to copy\" and \"can move in place\" cases\n\nFor one thing, rechecking the flag on each iteration of a loop is rather\nsilly, especially when there\u0027s very little in common between the \"copy\"\nand \"move\" cases and the loop is pretty hot.\n\nFor another, it\u0027s better to have the counter-related logics lifted\ninto substitute().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "37156835e3d725b6d750f000be33ba3814bb2310",
      "tree": "56d71c06fb4c7cba0f335d85bc051c7b7f787727",
      "parents": [
        "0e146208e5a4a6aa5cd7e52d93882eca71d8e50c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 00:01:19 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 02:38:24 2025 -0500"
      },
      "message": "lift handling of -\u003eimmutable into dup_token()\n\nWe need to make sure that any struct string with more than one token\nrefering to it will have -\u003eimmutable set; that\u0027s what de1fa7e60 (\"Make\nmacro expanded string immutable\") tried to achieve.  Unfortunately, it\nwas not enough - constructing an example where an unexpanded argument gets\nseveral copies is very easy (see the testcase in this commit).\n\nA better place for dealing with that is dup_token() - that\u0027s guaranteed\nto catch all such tokens and with sane code generation (\u003d\u003d with compiler\nmade certain that *streampos can\u0027t be altered by stores to alloc-\u003epos)\nit\u0027s quite cheap; we already have alloc-\u003epos in registers and checking\nif the lower 6 bits happen to be 001000 or 001001 (TOKEN_STRING and\nTOKEN_WIDE_STRING resp.) doesn\u0027t take much.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0e146208e5a4a6aa5cd7e52d93882eca71d8e50c",
      "tree": "a40dbca91472fd57c0937848460722ad9f5341ef",
      "parents": [
        "e588cf8393c900cfca2d36cfdc8c82f6b2c0a833"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 02:33:54 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 02:33:54 2025 -0500"
      },
      "message": "substitute(): merge TOKEN_IDENT case with default\n\nmakes for cheaper switch there, and the damn thing\u0027s hot enough\nfor that to matter...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e588cf8393c900cfca2d36cfdc8c82f6b2c0a833",
      "tree": "f5e91ba712efb09495f732cd35815546deccbcba",
      "parents": [
        "07773423cbaa25eb2f430ee4bef1760e8dc506ed"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 02:31:27 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 18 02:31:59 2025 -0500"
      },
      "message": "constify struct token pointers in dup_token() and substitute()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "07773423cbaa25eb2f430ee4bef1760e8dc506ed",
      "tree": "d27f604268670e8649f4a485ed6acedc25b30292",
      "parents": [
        "aaf69f2a87b577be8bf299ee890315a0ad3abb23"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Dec 12 22:47:14 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 17 16:31:08 2025 -0500"
      },
      "message": "tokenize.c: bump IDENT_HASH_BITS\n\nFrom 13 to 16.  8192 buckets is nowhere near enough for e.g.\nkernel builds - we end up with long hash chains.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aaf69f2a87b577be8bf299ee890315a0ad3abb23",
      "tree": "28ac42df60c6bdc788df013ea6923c1d1f1b41fe",
      "parents": [
        "153b13a7c931ec1a131438df044b4dfda071d1ba"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Dec 12 22:45:31 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 17 16:30:49 2025 -0500"
      },
      "message": "create_hashed_ident(): use memcmp() instead of strncmp()\n\nWe have already verified that lengths match...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "153b13a7c931ec1a131438df044b4dfda071d1ba",
      "tree": "29f1d7753b8606719202551c0017ab31d7e9fae4",
      "parents": [
        "08ed2cbdcd971add3de7251d690271c35af0462e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Dec 12 22:40:28 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 17 16:30:41 2025 -0500"
      },
      "message": "speed lookup_macro() up\n\nAgain, bloody awful code generation in even hotter spot - it\u0027s\ncalled for every identifier.  What we do is scan the list of\nsymbols for given identifier, looking for the first one with\nNS_MACRO or NS_UNDEF in sym-\u003enamespace, then check that it\u0027s\njust NS_MACRO.  The thing is, NS_MACRO never mixes with anything\nelse, so instead of comparison we can just check that this bit\nis set.  Result: test given bit in sym + constant offset vs.\nfetch word, shift it, mask and compare.  Microoptimization,\nbut that thing is called often enough to give measurable effect.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "08ed2cbdcd971add3de7251d690271c35af0462e",
      "tree": "e76a31f15582cddc2a3977992a3804475d6d1d44",
      "parents": [
        "2634e39bf02697a18fece057208150362c985992"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Dec 12 22:35:26 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 17 16:26:30 2025 -0500"
      },
      "message": "speed dup_token() up\n\nIt\u0027s one of the hottest spots in the entire pre-process.c;\nunfortunately, code generation is not good.\n\nCompiler does not know that streampos won\u0027t be pointing\nto alloc-\u003epos (alloc has been freshly allocated, but...),\nso it resorts to field-by-field copying, with arseloads of\nreloads; worse, those are bitfields, so results are really\nnot pretty.\n\nBetter solution: fetch *streampos into a local variable first,\nthen copy the entire token-\u003epos to alloc-\u003epos and assign the\nfields we need to copy from *streampos.\n\nEnds up with much better code generation.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2634e39bf02697a18fece057208150362c985992",
      "tree": "494b07e70abc01d7a176489843e8c0cea4794721",
      "parents": [
        "fbdde3127b83e6d09e0ba808d7925dd84407f3c6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 16 15:01:16 2025 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 17 16:24:48 2025 -0500"
      },
      "message": "fix __builtin_strlen() constantness\n\n__builtin_strlen() is an integer constant expression iff the argument\nis a string constant; expand_strlen() does the right thing, but\nit comes too late - we need the same logics in -\u003eevaluate() for\n__builtin_strlen().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fbdde3127b83e6d09e0ba808d7925dd84407f3c6",
      "tree": "602d0e365e38d1ed99ad775784728b9135b9c68c",
      "parents": [
        "dc9efe442b8949234a6599fdc94dc7221dd040e1"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@linaro.org",
        "time": "Wed Oct 15 16:08:13 2025 +0300"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Thu Oct 16 21:52:33 2025 -0700"
      },
      "message": "builtin: implement __builtin_strlen() for constants\n\nPeople are adding compile time asserts to check whether strings are\nthe expected length.  In GCC and Clang strlen(\"foo\") is expanded at\ncompile time so this works, but in Sparse it triggers a \"bad constant\nexpression\" warning.  Implement expand_strlen() to handle string\nliterals.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@linaro.org\u003e\nLink: https://lore.kernel.org/all/CANiDSCsBAq3Yx4ybarUb_1NkQ-bvfXvWqb-DfqXatkiYJFZWiQ@mail.gmail.com/\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "dc9efe442b8949234a6599fdc94dc7221dd040e1",
      "tree": "7b5c4bb23803c125ad2b06f4b76aa4d894f3a93f",
      "parents": [
        "610d841da021200788d2200d7bc66f08bcc97c23"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@linaro.org",
        "time": "Wed Dec 04 10:24:41 2024 +0300"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Wed Oct 15 07:32:06 2025 -0700"
      },
      "message": "sparse: implement typeof_unqual()\n\nThe typeof_unqual() is a c23 operator which is similar to typeof() except\nit masks away the qualifiers, ie. MOD_CONST, MOD_VOLATILE and\nMOD_RESTRICT.  So the implementation of typeof() and typeof_unqual() is\nbasically the same except that in examine_typeof_helper() we have the mask:\n\n        mod \u0026\u003d ~MOD_QUALIFIER;\n\nWe will still preserve the MOD_ATOMIC, MOD_NOCAST and MOD_SPECIFIER\nmodifiers with both typeof() and typeof_unqual().\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@linaro.org\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "610d841da021200788d2200d7bc66f08bcc97c23",
      "tree": "2aa77ceca38606425a54cb822c9a9aae8794b0a1",
      "parents": [
        "67f0a03cee4637e495151c48a02be642a158cbbb"
      ],
      "author": {
        "name": "Changyuan Lyu",
        "email": "changyuan.lv@gmail.com",
        "time": "Sun Sep 28 17:57:27 2025 -0700"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Sun Sep 28 23:14:35 2025 -0700"
      },
      "message": "doc: update the instructions for mailing list subscription\n\nMajordomo commands are deprecated as per\nhttps://subspace.kernel.org/vger.kernel.org.html#what-happened-to-majordomo.\n\nSigned-off-by: Changyuan Lyu \u003cchangyuan.lv@gmail.com\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "67f0a03cee4637e495151c48a02be642a158cbbb",
      "tree": "259f0f0053ac1951c6fa8b5ff25425ea0aa34695",
      "parents": [
        "bb97bcbd4f7e00896ee447752dfa59bf302c7d17"
      ],
      "author": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Sat Sep 27 18:43:09 2025 -0700"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Sat Sep 27 18:43:09 2025 -0700"
      },
      "message": "doc: update maintainer\n\nChris Li is back as sparse maintainer.\n\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "bb97bcbd4f7e00896ee447752dfa59bf302c7d17",
      "tree": "434fbaeb056897244c9220f5d0cef2b6631d8633",
      "parents": [
        "366ad4b2fa3e8361001a08b3719881b6d7c87e90"
      ],
      "author": {
        "name": "wenlunpeng",
        "email": "wenlunpeng@uniontech.com",
        "time": "Mon Sep 23 16:39:44 2024 +0800"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Thu Sep 25 07:28:08 2025 -0700"
      },
      "message": "fix: Skip if symbol have no op when handle_qualifiers\n\nMissing s-\u003eop will cause a SIGSEGV when trying to get s-\u003eop-\u003etype.\n\nI encountered the issue when building with sparse in a linux kernel tree\ncontaining a vendor network driver. A simple `make` will success but a\n`make C\u003d2` will exit with exit-code 139. The coredump shows that s-\u003eop\nhere is NULL when dealing with a source code line like:\n\tu8 *byte;\n\nLines like this exist everywhere. I cannot figure out why just this file\nbreaks sparse. But I think the NULL judge is needed here.\n\nSigned-off-by: wenlunpeng \u003cwenlunpeng@uniontech.com\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "366ad4b2fa3e8361001a08b3719881b6d7c87e90",
      "tree": "7a5ff32b6ef13f119bf83e72614d4a1e7f83cb0a",
      "parents": [
        "c47766ce0620001dfaf201674c990cde2e10423e"
      ],
      "author": {
        "name": "Vincent Mailhol",
        "email": "mailhol@kernel.org",
        "time": "Sun Sep 21 15:12:30 2025 +0900"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Tue Sep 23 23:43:00 2025 -0700"
      },
      "message": "Warn about \"unsigned value that used to be signed against zero\"\n\nConsider this first pattern:\n\n  void error(void);\n  int check(void);\n\n  void foo (void)\n  {\n  \tunsigned int ret;\n\n  \tret \u003d check();\n  \tif (ret \u003c 0)\n  \t\terror();\n  }\n\nHere, the comparison against zero is a tautology: ret, which is\nunsigned, can never be negative. Thus the compiler will remove the\nerror branch causing a bug.\n\nThis pattern is caught by clang and gcc\u0027s -Wtype-limits. *However*,\nthat diagnostic has many lost bullets. It will also complain on some\nlegitimate things such as in this second pattern:\n\n  void error(void);\n\n  void bar (unsigned int val)\n  {\n  \tif (val \u003c 0 || val \u003e 42)\n  \t\terror();\n  }\n\nHere, the author just want to do a range check. Yes, the\n\n  val \u003c 0\n\ncomparison is a tautology, but that time, it does not result in faulty\ncode when optimised out by the compiler.\n\nThere is thus a need for a check that will catch the first pattern but\nthat will let the second one go through. The difference between the\ntwo patterns is that in the first one the value returned by the\ncheck() function used to be signed whereas in the second one val was\nalways unsigned to begin with.\n\nAdd a check in sparse to warn if a value which used to be signed gets\nassigned to an unsigned and then gets compared against zero, either\nval \u003c 0 or val \u003e\u003d 0.\n\nAs pointed out by Linus in his original message, a few false positives\nremain, especially when many inline functions and macros get involved,\nbut the level of noise is nothing in comparison to the -Wtype-limits.\n\nSuggested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nLink: https://lore.kernel.org/all/CAHk-\u003dwjQCbRA1UEag-1-9yn08KNNqerTj++SCbbW80At\u003drg5RQ@mail.gmail.com/\nSigned-off-by: Vincent Mailhol \u003cmailhol@kernel.org\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "c47766ce0620001dfaf201674c990cde2e10423e",
      "tree": "84c188195a70f478622e2466a3664470f1327e59",
      "parents": [
        "0196afe16a50c76302921b139d412e82e5be2349"
      ],
      "author": {
        "name": "Vincent Mailhol",
        "email": "mailhol@kernel.org",
        "time": "Tue Sep 23 00:53:21 2025 +0900"
      },
      "committer": {
        "name": "Chris Li",
        "email": "sparse@chrisli.org",
        "time": "Tue Sep 23 23:43:00 2025 -0700"
      },
      "message": "vadidation: add used-to-be-signed unit tests\n\nAdd unit tests for the new used-to-be-signed check as introduced in [1]:\n\nResults before applying [1]:\n\n  $ ./test-suite used-to-be-signed.c\n    TEST    used-to-be-signed (used-to-be-signed.c)\n  error: actual error text does not match expected error text.\n  error: see used-to-be-signed.c.error.* for further investigation.\n  --- used-to-be-signed.c.error.expected\t2025-09-23 00:50:07.079654644 +0900\n  +++ used-to-be-signed.c.error.got\t2025-09-23 00:50:07.073654719 +0900\n  @@ -1,8 +0,0 @@\n  -used-to-be-signed.c:8:19: warning: unsigned value that used to be signed checked against zero?\n  -used-to-be-signed.c:6:33: signed value source\n  -used-to-be-signed.c:11:17: warning: unsigned value that used to be signed checked against zero?\n  -used-to-be-signed.c:6:33: signed value source\n  -used-to-be-signed.c:14:20: warning: unsigned value that used to be signed checked against zero?\n  -used-to-be-signed.c:6:33: signed value source\n  -used-to-be-signed.c:17:18: warning: unsigned value that used to be signed checked against zero?\n  -used-to-be-signed.c:6:33: signed value source\n  error: FAIL: test \u0027used-to-be-signed.c\u0027 failed\n  KO: out of 1 tests, 0 passed, 1 failed\n\n...and after:\n\n  $ ./test-suite used-to-be-signed.c\n    TEST    used-to-be-signed (used-to-be-signed.c)\n  OK: out of 1 tests, 1 passed, 0 failed\n\n[1] Warn about \"unsigned value that used to be signed against zero\"\nLink: https://lore.kernel.org/linux-sparse/20250921061337.3047616-1-mailhol@kernel.org/\n\nSigned-off-by: Vincent Mailhol \u003cmailhol@kernel.org\u003e\nSigned-off-by: Chris Li \u003csparse@chrisli.org\u003e\n"
    },
    {
      "commit": "0196afe16a50c76302921b139d412e82e5be2349",
      "tree": "3eaeea56f33f93dda57250f5957648d5efd1fe6e",
      "parents": [
        "09411a7a5127516a0741eb1bd8762642fa9197ce",
        "77b30af89aa02b98420b9cff6bdc6892647e00f1"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Feb 03 17:12:35 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Feb 03 17:12:35 2024 +0100"
      },
      "message": "Merge branch \u0027riscv\u0027\n"
    },
    {
      "commit": "09411a7a5127516a0741eb1bd8762642fa9197ce",
      "tree": "8fc2899819befdac25a55e50b2ecda6dcaf6009b",
      "parents": [
        "c991e5c68b48158410ebda9cd0ae0fde065faec7",
        "2925599897b1459fa46ed95c5e4cceebc91e824a"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:14:05 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:14:05 2024 +0100"
      },
      "message": "Merge branch \u0027llvm-next\u0027\n\n* llvm: avoid trivial recursion in symbol_type()\n* llvm: enable LLVM on arm64\n"
    },
    {
      "commit": "2925599897b1459fa46ed95c5e4cceebc91e824a",
      "tree": "7020d1722fc1554b9118356bbc8f8b255a96f881",
      "parents": [
        "bf6ea1c69791eaf0ad58587f578d126b0484b688"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 17:16:35 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:13:43 2024 +0100"
      },
      "message": "llvm: allow arm64\n\nCurrently, all architectures but the i386/x86 ones are excluded\nfrom the LLVM backend, mainly because the lack of testing.\n\nSince I can test it now, allow arm64/aarch64 too.\n\nNote: this patch is somehow incomplete because the layout is not set\n      but it\u0027s not clear what exactly the layout is needed for and at\n      least it allows to run the testsuite on this architecture.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "c991e5c68b48158410ebda9cd0ae0fde065faec7",
      "tree": "37c21b201a8de97a49d396e43c86c79fff572cca",
      "parents": [
        "1cf3d98cf171fa27944750daba5e80e17cb8e9d0",
        "0544c547682b878758eea731ef4b8e64e5ec91fb"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:11:38 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:11:38 2024 +0100"
      },
      "message": "Merge branch \u0027llvm-15\u0027\n\n* Support LLVM-15 and later\n"
    },
    {
      "commit": "bf6ea1c69791eaf0ad58587f578d126b0484b688",
      "tree": "54a55c2ace0759ff997bc0b706bf56c22824fb5a",
      "parents": [
        "0544c547682b878758eea731ef4b8e64e5ec91fb"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Wed Dec 20 00:17:15 2023 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:10:48 2024 +0100"
      },
      "message": "llvm: avoid trivial recursion in symbol_type()\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "0544c547682b878758eea731ef4b8e64e5ec91fb",
      "tree": "6f993a993d22d7ea17b2f1ede9c942b239fb7fc2",
      "parents": [
        "b753d383f731984c0789366f064f59883d30d229"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:24:12 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Mon Jan 29 18:07:23 2024 +0100"
      },
      "message": "llvm: fix LLVM 15 deprecation warnings\n\nLLVM 15 switched to opaque pointers by default and no longer supports typed pointers.\nRemove deprecated LLVM calls and update test.\n\nOriginal-patch-by: Vladimir Petko \u003cvladimir.petko@canonical.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "77b30af89aa02b98420b9cff6bdc6892647e00f1",
      "tree": "46974fcc9038399c27d037eff243ca0c647a0839",
      "parents": [
        "3500cba405b71492fee7a07ac4fed21046311928"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sun Jan 21 00:29:17 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Tue Jan 23 21:51:07 2024 +0100"
      },
      "message": "riscv: G extension implies Zicsr \u0026 Zifencei\n\nSo, add the corresponding flags.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "3500cba405b71492fee7a07ac4fed21046311928",
      "tree": "dc7053ac5add213dbe4dc3598b6c2230666f468d",
      "parents": [
        "8264c2019f75563cf8704e4385f90b3020a468a7"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sun Jan 21 00:29:10 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Tue Jan 23 21:49:25 2024 +0100"
      },
      "message": "riscv: V extension implies F \u0026 D\n\nSo, add the corresponding flags.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "8264c2019f75563cf8704e4385f90b3020a468a7",
      "tree": "ad2cb18b853d7a1c740bb682ce4e16f726045823",
      "parents": [
        "3a41dd055be9184e1d65ea7f3434f487847eb1dd"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sun Jan 21 02:23:40 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Tue Jan 23 21:48:09 2024 +0100"
      },
      "message": "riscv: add predefines for v_min_vlen, v_elen \u0026 v_elen_fp\n\nThese may be needed once the V extension is enabled.\nSo add them.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "3a41dd055be9184e1d65ea7f3434f487847eb1dd",
      "tree": "cdbfe59bab132ba358ea1f7aabb50afc9e22f536",
      "parents": [
        "40c42530d7d37217a98bf9bcd28e3ad2ba4fe678"
      ],
      "author": {
        "name": "Conor Dooley",
        "email": "conor.dooley@microchip.com",
        "time": "Mon Mar 06 22:23:22 2023 +0000"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sun Jan 21 14:43:56 2024 +0100"
      },
      "message": "RISC-V: Add basic support for the vector extension\n\nI\u0027ve started hitting this in CI while testing Andy\u0027s vector enablement\nseries. I\u0027m not entirely sure if there is more to do here, other than\nsqueezing in the duplicate of what has been done for other extensions.\n\nSigned-off-by: Conor Dooley \u003cconor.dooley@microchip.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "b753d383f731984c0789366f064f59883d30d229",
      "tree": "ecf84b17c0da0a8e40f845e3b3931e4a8799bc80",
      "parents": [
        "d5a73d316e38f533d3ec61879149a1c33fac51a3"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:24:12 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:25:38 2024 +0100"
      },
      "message": "llvm: ensure SYM_NODE is stripped before accessing the return type\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "d5a73d316e38f533d3ec61879149a1c33fac51a3",
      "tree": "e76da38b72e37757fd9a12753f1fcb2e122305a3",
      "parents": [
        "d7edb6c7b7c62db1a328fd88f7888324293b005c"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:24:12 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:25:33 2024 +0100"
      },
      "message": "llvm: do not duplicate strings and use their length in struct string\n\nIn 2 places, we duplicate the storage for a string (with strdup) and we\nalso calculate its length via strlen(). Both operation are unneeded\nas the length is already calculated in the struct string and the pointer\nto the string data can be safely reused since Sparse will not modify or free it.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "d7edb6c7b7c62db1a328fd88f7888324293b005c",
      "tree": "e690670840f9b8c049d5302598efe9e566a19adf",
      "parents": [
        "453d7af76abaef3de7934bf7159443103cc56f6b"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:24:12 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:25:28 2024 +0100"
      },
      "message": "llvm: add a few testcases for integer/pointer conversion\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "453d7af76abaef3de7934bf7159443103cc56f6b",
      "tree": "04a8c06dfe47c6280582673de8851f7a8b285fad",
      "parents": [
        "eac793a4ec5e4647e8301ddeb7c13ac78cb54fe1"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:24:12 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "lucvoo@kernel.org",
        "time": "Sat Jan 20 01:25:23 2024 +0100"
      },
      "message": "llvm: suppress warnings about deprecated API\n\nLLVM-14 still support LLVMBuildCall() and friends but deprecated them via\nthe attribute, so warnings are issued when compiling.\n\nSuppress these warnings to keep builds clean.\n\nSigned-off-by: Luc Van Oostenryck \u003clucvoo@kernel.org\u003e\n"
    },
    {
      "commit": "1cf3d98cf171fa27944750daba5e80e17cb8e9d0",
      "tree": "c5230ccc96ede1bde0ed69300d4a136f13c052bd",
      "parents": [
        "04558f85973cea64651638e4e5d4e547b3bf421d",
        "5ec6e21b35d4d9fcd4071e77ed60607c21bfcc4a"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 14:41:31 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 14:41:31 2024 +0100"
      },
      "message": "Merge branches \u0027doc\u0027 and \u0027stray-t\u0027\n\n* make doc generation OK again on readthedocs\n* suppress a warning in the testsuite\n"
    },
    {
      "commit": "5ec6e21b35d4d9fcd4071e77ed60607c21bfcc4a",
      "tree": "d08214da1d7c40301d741d4e679f6dcb3df25129",
      "parents": [
        "3ddf02ddcb9f04a92b272383a252a8fe350663ab"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 13:35:56 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 13:40:44 2024 +0100"
      },
      "message": "testsuite: avoid \"warning: stray \\ before t\" message\n\nGrep (or maybe only some recent versions) complains when using the (wrong)\n\u0027\\\\t\u0027 pattern.\n\nThis pattern was used only once to check if the following pattern was at\nthe beginning of an instruction.\n\nPrefer to use the more explicit \u0027^.\u0027 pattern, already used in other tests.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "04558f85973cea64651638e4e5d4e547b3bf421d",
      "tree": "52174522364d79ff255c7e2e989fef3b543e8583",
      "parents": [
        "550130d252e71c5b5552f81b69734f6f10ae6448"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jan 04 23:08:36 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 13:28:43 2024 +0100"
      },
      "message": "add .readthedocs.yaml\n\nRead the Docs now requires a config file in the project top directory.\nSo, here it is.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "550130d252e71c5b5552f81b69734f6f10ae6448",
      "tree": "523c2e84a984140cc8300f1feebb5662d2789497",
      "parents": [
        "3f9b43dcf4975dfc4464d1f0c6053f493018d5bd"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jan 04 23:08:36 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 13:27:27 2024 +0100"
      },
      "message": "doc: set \u0027en\u0027 as language in Sphinx\u0027s config file\n\nNewer versions of Sphinx don\u0027t support \u0027None\u0027 for \u0027language\u0027.\n\nSo, set \u0027en\u0027 as language\u0027.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "3f9b43dcf4975dfc4464d1f0c6053f493018d5bd",
      "tree": "4255204a751be7a5e42562c7cd0c250d915173ec",
      "parents": [
        "3ddf02ddcb9f04a92b272383a252a8fe350663ab"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jan 04 23:08:36 2024 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jan 07 13:26:44 2024 +0100"
      },
      "message": "doc: update conf.py for more recent version of sphinx\n\nSphinx versions older than 1.7 don\u0027t need and don\u0027t support \u0027html_context\u0027.\n\nSo, set 1.8 as the minimal version and remove \u0027html_context\u0027 from the config.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "3ddf02ddcb9f04a92b272383a252a8fe350663ab",
      "tree": "16a943b7894b943dd12dc047e320c1ebb4e80fa8",
      "parents": [
        "adceff0ab6e3d8bf43de52e2c2fbebf27db30deb"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Dec 28 14:03:50 2023 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Dec 28 14:12:27 2023 +0100"
      },
      "message": "reassoc: fix infinite loop during reassociation\n\nThe infinite loop is triggered by some fairly simple code on Zephyr and is\ncaused by some exchange of pseudos done without checking the canonical order.\n\nFix this by adding the check for the canonical order.\nAlso use can_move_to() instead of the simpler one_use() to check the dominance\nof the moved pseudos.\n\nLink: https://github.com/zephyrproject-rtos/zephyr/issues/63417\nLink: https://lore.kernel.org/linux-sparse/AD16C022-C5F3-4DA2-A1A0-775E4C95A7A1@intel.com/\nReported-by: Marc Herbert \u003cmarc.herbert@intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "adceff0ab6e3d8bf43de52e2c2fbebf27db30deb",
      "tree": "54b012a888edca87c8ecc020f1bded92622f5d58",
      "parents": [
        "98b203419679a4ccb224ff6a48ed39119faf8d71"
      ],
      "author": {
        "name": "Jeff Layton",
        "email": "jlayton@kernel.org",
        "time": "Mon Feb 27 14:39:27 2023 -0500"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Dec 18 14:04:46 2023 +0100"
      },
      "message": "linearize.c: fix buffer overrun warning from fortify\n\nThe resulting string from snprintf, won\u0027t be nearly 64 bytes, but \"buf\"\nis only 16 bytes long here. This causes FORTIFY_SOURCE to complain when\ngiven the right options.\n\nSigned-off-by: Jeff Layton \u003cjlayton@kernel.org\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "98b203419679a4ccb224ff6a48ed39119faf8d71",
      "tree": "7faa37f7de424d4838d3b5bd5204280e4bd4d908",
      "parents": [
        "40c42530d7d37217a98bf9bcd28e3ad2ba4fe678"
      ],
      "author": {
        "name": "Guennadi Liakhovetski",
        "email": "guennadi.liakhovetski@linux.intel.com",
        "time": "Wed Nov 16 17:55:25 2022 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Dec 18 14:04:23 2023 +0100"
      },
      "message": "xtensa: switch to little endianness\n\nCurrent gcc options only support the little endian mode on Xtensa,\nswitch over to it.\n\nSigned-off-by: Guennadi Liakhovetski \u003cguennadi.liakhovetski@linux.intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "40c42530d7d37217a98bf9bcd28e3ad2ba4fe678",
      "tree": "9a51e837566632a9a9880cd5d44c4cdce801fbfd",
      "parents": [
        "7058eaf5677ff4b0f253d2985333d312e3d542ba"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Wed Aug 10 22:33:56 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Dec 18 13:42:39 2023 +0100"
      },
      "message": "RISC-V: Add support for the zihintpause extension\n\nThis was recently added to binutils and with any luck will soon be in\nLinux, without it sparse will fail when trying to build new kernels on\nsystems with new toolchains.\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nTested-by: Conor Dooley \u003cconor.dooley@microchip.com\u003e\nTested-by: Geert Uytterhoeven \u003cgeert+renesas@glider.be\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "7058eaf5677ff4b0f253d2985333d312e3d542ba",
      "tree": "503d88cdf95cd1068964a4377021ef5fa3c8404a",
      "parents": [
        "eac793a4ec5e4647e8301ddeb7c13ac78cb54fe1"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Wed Aug 10 20:31:38 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Dec 18 13:38:50 2023 +0100"
      },
      "message": "RISC-V: Add support for the zicbom extension\n\nThis was recently added to binutils and with any luck will soon be in\nLinux, without it sparse will fail when trying to build new kernels on\nsystems with new toolchains.\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nTested-by: Conor Dooley \u003cconor.dooley@microchip.com\u003e\nTested-by: Geert Uytterhoeven \u003cgeert+renesas@glider.be\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "eac793a4ec5e4647e8301ddeb7c13ac78cb54fe1",
      "tree": "5cf657f7b256d5a05aaee7cf0a62125455915c48",
      "parents": [
        "ce1a6720f69e6233ec9abd4e9aae5945e05fda41",
        "25e96501f249b27cb930a09aba5aeb33a047d14c"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Dec 16 12:12:28 2023 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Dec 16 12:12:28 2023 +0100"
      },
      "message": "Merge branch \u0027handle-cleanup-attr\u0027\n\n* teach Sparse about \u0027cleanup\u0027 attribute so that Smatch can handle it\n"
    },
    {
      "commit": "25e96501f249b27cb930a09aba5aeb33a047d14c",
      "tree": "5cf657f7b256d5a05aaee7cf0a62125455915c48",
      "parents": [
        "dc581e62b74dafb1ef4aca1ab088e37ba6fd7c94"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@linaro.org",
        "time": "Fri Dec 08 12:49:34 2023 +0300"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Dec 16 12:09:35 2023 +0100"
      },
      "message": "parse: handle __cleanup__ attribute\n\nThe kernel has recently started using the __cleanup__ attribute.  Save\na pointer to cleanup function.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@linaro.org\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "dc581e62b74dafb1ef4aca1ab088e37ba6fd7c94",
      "tree": "1dd170508fa32f53eca0b98de7f8756cd48a65af",
      "parents": [
        "ce1a6720f69e6233ec9abd4e9aae5945e05fda41"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Dec 11 13:01:06 2023 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Dec 16 12:06:28 2023 +0100"
      },
      "message": "parse: add testcases for __cleanup__ attribute\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "ce1a6720f69e6233ec9abd4e9aae5945e05fda41",
      "tree": "c26e1e0d39f0d0f525848a72a72d8d3c032e197c",
      "parents": [
        "0e1aae55e49cad7ea43848af5b58ff0f57e7af99",
        "d42df42ec5a5f0ac7e58bfbfa6ceadd706b5517f"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:16:17 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:16:17 2022 +0200"
      },
      "message": "Merge branches \u0027unreplaced\u0027 and \u0027inline\u0027\n\n* fix \"unreplaced\" warnings caused by using typeof() on inline functions\n* cleanup related to inlining of variadic functions\n"
    },
    {
      "commit": "d42df42ec5a5f0ac7e58bfbfa6ceadd706b5517f",
      "tree": "18ffe4b93eec905205041d724b8ab40c96f0a3d9",
      "parents": [
        "1777fe6b3ce8359b49d133924f1488ce0b0cc628"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Jun 25 18:05:52 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:13:20 2022 +0200"
      },
      "message": "inline: free symbol list after use\n\nWe usually don\u0027t free allocated memory because it\u0027s not known\nwhen the allocated objects aren\u0027t used anymore.\n\nBut here it\u0027s pretty obvious, so free this symbol list.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "1777fe6b3ce8359b49d133924f1488ce0b0cc628",
      "tree": "a72d0fc2728d35736e3f1e58f31cb8ba094d59fe",
      "parents": [
        "b6b0d32a94a7ae21ac28be762be8ad50b092b177"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Jun 25 15:26:04 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:13:20 2022 +0200"
      },
      "message": "inline: allocate statement after guards\n\nIn inline_function(), the statement that will correspond to the\ninlined code is allocated in the function declaration but then\nit\u0027s checked if the function can be allocated or not.\n\nThis is not much memory and the checks should succeed most of the time\nbut it\u0027s clearer if the statement is allocated after the checks.\n\nSo, move the allocation after the checks.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "b6b0d32a94a7ae21ac28be762be8ad50b092b177",
      "tree": "f69b841c022b132ffb8316fa65d2ef37897ea776",
      "parents": [
        "ec2e9b554d4799633ff195106280a8146647db5b"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Jun 25 15:25:19 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:13:07 2022 +0200"
      },
      "message": "inline: avoid needless intermediate vars\n\nIn inline_function(), we need to iterate over the parameters\nand the (effective) arguments. An itermediate variable is used for\neach: \"name_list\" and \"arg_list\".\n\nThese confuse me a lot (especially \"name_list\", \"param_list\" would\nbe much more OK) and are just used once.\n\nSo, avoid using an intermediate variable for these.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "ec2e9b554d4799633ff195106280a8146647db5b",
      "tree": "daec3ab1ed894a8e647848b62f8ebfaf05b2bb21",
      "parents": [
        "fd3f7de6113aebe927d9bfff0f485e48a6edf68e"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Jun 25 15:27:17 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:12:49 2022 +0200"
      },
      "message": "inline: declaration of the variadic vars is useless\n\nWhen inlining a function call, the arguments of this call must\nsomehow be assigned to the names used in the function definition.\nThis is done via a STMT_DECLARATION associated to the top\nSTMT_COMPOUND which now correspond to the inlined code.\n\nThis is perfectly fine for the normal case of non-variadic function\nbut when inlining a variadic function there is no corresponding name\nto assign the non-fixed arguments to (such arguments must either be\nnot used at all or copied via __builtin_va_arg_pack()). What\u0027s then\nhappening is essentially that these variables are self-assigned.\nNot Good.\n\nThis seems to be relatively harmless but is confusing.\nSo only put the fixed/named arguments in the declaration list.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "fd3f7de6113aebe927d9bfff0f485e48a6edf68e",
      "tree": "65233a6f0e9fad30e37546e3554e6f8e083930c8",
      "parents": [
        "102baa11391d48e5da57519df53b7b8d7d751887"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat Jun 25 11:34:21 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 27 12:09:55 2022 +0200"
      },
      "message": "inline: comment about creating node of node on variadics\n\nWhen inlining a variadic function the extra arguments are\nadded in the declaration list as SYM_NODE but these arguments\ncan already be SYM_NODEs.\n\nSparse doesn\u0027t support everywhere such nested nodes (they must\nbe merged) but in this case it\u0027s fine as the node will be merged\nwhen evaluated.\n\nAdd a comment telling the situation is fine.\nAlso, move the code to where the variadic arguments are handled\nsince the fixed one will be anyway directly overwritten.\n\nNote: Sparse doesn\u0027t really support inlining of variadic functions\n      but is fine when the arguments are not used (and such cases\n      occur in the kernel).\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "102baa11391d48e5da57519df53b7b8d7d751887",
      "tree": "774c2797c2216e2a9f98aca4c8c8ae52a060b0ed",
      "parents": [
        "4880bd1999feb9276faacd9a79647b53b6ffe8be"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 26 01:11:05 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 26 14:52:26 2022 +0200"
      },
      "message": "inline: add testcases for inlining of variadics\n\nInlining of variadic functions needs some special cases.\nAdd some testcases for this.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "0e1aae55e49cad7ea43848af5b58ff0f57e7af99",
      "tree": "4139644cb4f88995d9b6fff5474f5e9935c57123",
      "parents": [
        "4880bd1999feb9276faacd9a79647b53b6ffe8be"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jun 23 23:44:44 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Fri Jun 24 18:45:42 2022 +0200"
      },
      "message": "fix \"unreplaced\" warnings caused by using typeof() on inline functions\n\nCurrently, sparse do all its inlining at the tree level, during\nconstant expansion. To not mix-up the evaluation of the original\nfunction body in case the address of an inline function is taken or\nwhen the function can\u0027t otherwise be inlined, the statements and\nsymbols lists of inline functions are kept in separated fields.\nThen, if the original body must be evaluated it must first be\n\u0027uninlined\u0027 to have a copy in the usual fields.\n\nThis make sense when dealing with the definition of the function.\nBut, when using typeof() on functions, the resulting type doesn\u0027t\nrefer to this definition, it\u0027s just a copy of the type and only\nof the type. There shouldn\u0027t be any reasons to uninline anything.\nHowever, the distinction between \u0027full function\u0027 and \u0027type only\u0027\nis not made during evaluation and the uninlining attempt produce\na lot of \"warning: unreplaced symbol \u0027...\u0027\" because of the lack\nof a corresponding definition.\n\nFix this by not doing the uninlining if the symbol lack a definition.\n\nNote: It would maybe be more appropriate for EXPR_TYPE to use\n      a stripped-own version of evaluate_symbol() doing only the\n      examination of the return and argument types, bypassing the\n      attempt to uninline the body and evaluate the initializer and\n      the statements since there is none of those for an EXPR_TYPE.\n\nLink: https://lore.kernel.org/all/202206191726.wq70mbMK-lkp@intel.com\nReported-by: kernel test robot \u003clkp@intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "4880bd1999feb9276faacd9a79647b53b6ffe8be",
      "tree": "2afe45d8d6ed1d161352ba7f198715b296fade88",
      "parents": [
        "9212270048c3bd23f56c20a83d4f89b870b2b26e"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue Jun 14 01:43:12 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue Jun 14 02:08:25 2022 +0200"
      },
      "message": "predefine __ATOMIC_ACQUIRE \u0026 friends as weak\n\nIn kernel\u0027s arch/mips/Makefile the whole content of gcc\u0027s -dM is used\nfor CHECKFLAGS. This conflict with some macros also defined internally:\n\tbuiltin:1:9: warning: preprocessor token __ATOMIC_ACQUIRE redefined\n\tbuiltin:0:0: this was the original definition\n\nFix this by using a weak define for these macros.\n\nReported-by: Randy Dunlap \u003crdunlap@infradead.org\u003e\nReported-by: kernel test robot \u003clkp@intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "9212270048c3bd23f56c20a83d4f89b870b2b26e",
      "tree": "3785b539c4787497f38770cd6fbc3b56afe226ba",
      "parents": [
        "29083a76efa600b02d30f32d0393ae53e37887f8",
        "53e04b3b780bbcf2dd3eb7990c17414742bbfef9"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jun 09 11:11:09 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jun 09 11:11:09 2022 +0200"
      },
      "message": "Merge branches \u0027cgcc-dash-x\u0027 and \u0027fixes\u0027\n\n* cgcc: do not die on \u0027-x assembler\u0027\n* fix crash when inlining casts of erroneous expressions\n- allow show_token() on TOKEN_ZERO_IDENT\n"
    },
    {
      "commit": "53e04b3b780bbcf2dd3eb7990c17414742bbfef9",
      "tree": "4d270f603f533506d38f8b00c4cac3c7bb426c58",
      "parents": [
        "e44f724a5ce007ad789d4688a37d03c4845032c0"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue Jun 07 14:22:13 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Thu Jun 09 11:06:53 2022 +0200"
      },
      "message": "allow show_token() on TOKEN_ZERO_IDENT\n\nTOKEN_ZERO_IDENTs are created during the evaluation of pre-processor\nexpressions but which otherwise are normal idents and  were first tokenized\nas TOKEN_IDENTs.\n\nAs such, they could perfectly be displayed by show_token() but are not.\nSo, in error messages they are displayed as \"unhandled token type \u00274\u0027\",\nwhich is not at all informative.\n\nFix this by letting show_token() process them like usual TOKEN_IDENTs.\nIdem for quote_token().\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e44f724a5ce007ad789d4688a37d03c4845032c0",
      "tree": "5323db16e47c5b9f4b89b4d7c39f0351358877d5",
      "parents": [
        "b3cf30ba5b47dfa7414416fe3bc5ae34db6065e7"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 06 23:49:14 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue Jun 07 14:52:37 2022 +0200"
      },
      "message": "fix crash when inlining casts of erroneous expressions\n\nSparse do inlining very early, during expansion, just after (type)\nevaluation and before IR linearization, and is done even if some\nerrors have been found. This means that the inlining must be robust\nagainst erroneous code.\n\nHowever, during inlining, a cast expression is always dereferenced and\na crash will occur if not valid (in which case it should be null).\n\nFix this by checking for null cast expressions and directly returning\nNULL, like done for the inlining of the other invalid expressions.\n\nLink: https://lore.kernel.org/r/e42698a9-494c-619f-ac16-8ffe2c87e04e@intel.com\nReported-by: kernel test robot \u003clkp@intel.com\u003e\nReported-by: Yafang Shao \u003claoar.shao@gmail.com\u003e\nReported-by: Yujie Liu \u003cyujie.liu@intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "29083a76efa600b02d30f32d0393ae53e37887f8",
      "tree": "28cfa31234b98b9a7b495c09cac7cad5888cf81e",
      "parents": [
        "b3cf30ba5b47dfa7414416fe3bc5ae34db6065e7"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 06 22:23:51 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon Jun 06 22:40:23 2022 +0200"
      },
      "message": "cgcc: do not die on \u0027-x assembler\u0027\n\nCurrently cgcc will die if the option \u0027-x\u0027 is used with any argument\nother than \u0027c\u0027.\n\nIt makes sense since sparse can only handle C files but it can be\nuseful in a project to simply use something like:\n\tmake CC\u003dcgcc\n\nSo, instead of die()ing, avoid calling sparse if such \u0027-x\u0027 option\nis used, like already done by default for non .c files.\n\nOriginal-patch-by: Tom Rix \u003ctrix@redhat.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "b3cf30ba5b47dfa7414416fe3bc5ae34db6065e7",
      "tree": "aaa635a9d12f6c282a83ce53fe2b955406a99309",
      "parents": [
        "d9c17b4dc21ef531d673d1d6e510347e141e6801",
        "b296539554213125eb8f61291c862eec190e4c9b"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:19:28 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:19:28 2022 +0200"
      },
      "message": "Merge branch \u0027riscv\u0027\n\n* riscv: small improvements of \u0027-march\u0027 parsing\n"
    },
    {
      "commit": "b296539554213125eb8f61291c862eec190e4c9b",
      "tree": "e61ded885dc846c6dc20a8331a20cc127f326024",
      "parents": [
        "dcb3887d85c10c96cc56d2715bf21566e3c31d9b"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:39 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:07:23 2022 +0200"
      },
      "message": "RISC-V: Remove \"g\" from the extension list\n\n\"g\" goes along with the base ISA, but it was being treated as an\nextension.  This allows for all sorts of odd ISA strings to be accepted\nby sparse, things like \"rv32ig\" or \"rv32gg\".  We\u0027re still allowing\nsome oddities, like \"rv32ga\", but this one was easy to catch.\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "dcb3887d85c10c96cc56d2715bf21566e3c31d9b",
      "tree": "25f2f88be5f8a2bc0a92f9c2c41c92644f7f5ee1",
      "parents": [
        "90feaaa967227961fc9972a0a46bb4fa51eec7b2"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:38 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:07:23 2022 +0200"
      },
      "message": "RISC-V: Remove the unimplemented ISA extensions\n\nThis made sense when we die()d on unknown ISA extensions, but now that\nwe\u0027re just warning it\u0027s actually a bit detrimental: users won\u0027t see that\ntheir unimplemented ISA extensions are silently having the wrong\ndefinitions set, which may cause hard to debug failures.\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "90feaaa967227961fc9972a0a46bb4fa51eec7b2",
      "tree": "683ec0180b0b7853e118a39858a92ba9e8d30487",
      "parents": [
        "e31e645f5c29b6587404c1efe534c65b4691e023"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:37 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:07:23 2022 +0200"
      },
      "message": "RISC-V: Match GCC\u0027s semantics for multiple -march instances\n\nGCC\u0027s semantics for \"-march\u003dX -march\u003dY\" are that Y entirely overrides X,\nbut sparse takes the union of these two ISA strings.  This fixes the\nbehavior by setting, instead of oring, the flags whenever a base ISA is\nencountered.  RISC-V ISA strings can only have a single base ISA, it\u0027s\nnot like x86 where the 64-bit ISA is an extension of the 32-bit ISA.\n\n[Luc Van Oostenryck: reset the flags at the start of the parsing loop]\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "e31e645f5c29b6587404c1efe534c65b4691e023",
      "tree": "d14510bf22917189140de439abdc72b56b82b80a",
      "parents": [
        "76d40fa9e54fdf790f9d1a4b97be93f94d26abfc"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:36 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 22:07:14 2022 +0200"
      },
      "message": "RISC-V: don\u0027t die() on -march errors, just warn\n\nParsing RISC-V ISA strings is extremely complicated: there are many\nextensions, versions of extensions, versions of the ISA string rules,\nand a bunch of unwritten rules to deal with all the bugs that fell out\nof that complexity.\n\nRather than die()ing when the ISA string parsing fails, just stop parsing\nwhere we get lost and emit a warning. Changes tend to end up at\nthe end of the ISA string, so that\u0027s probably going to work (and if\nit doesn\u0027t there\u0027s a warning to true and clue folks in).\n\nThis does have the oddity in that \"-Wsparse-error\" is ignored for this\nwarning but this option was never meant to be used at this stage of\nthe processing..\n\n[Luc Van Oostenryck: drop handling of \"-Wsparse-error\"]\n\nSuggested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nBased-on-patch-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "d9c17b4dc21ef531d673d1d6e510347e141e6801",
      "tree": "121a0e8ff0b7fe17992524128a8e9ba428187449",
      "parents": [
        "56afb504c0b917a2563b44fabe2f1e92e4c14287",
        "187285b32ea71c25419a09724d9fe5f1b46aab2e"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 18:29:41 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun Jun 05 18:30:32 2022 +0200"
      },
      "message": "Merge branch \u0027cast-value\u0027\n\n* small improvements to cast_value()\n"
    },
    {
      "commit": "187285b32ea71c25419a09724d9fe5f1b46aab2e",
      "tree": "4cc77121deaa91575ab75bb45a3635568f63cf71",
      "parents": [
        "698360ca020e8ce4bc84eb44233dba9dbc9b598c"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 15:27:37 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 15:52:42 2022 +0200"
      },
      "message": "cast_value: remove error-prone redundant argument\n\nThe last two arguments of cast_value() are the old expression and\nthe oldtype which suggest that this oldtype can be distinct from the\ntype of the old expression.\n\nBut this is not the case because internally the type used to retrieve\nthe value of the expression is the type of the expression itself (old-\u003ectype)\nthe type which is used and the two types must be the same (or at least\nbe equivalent).\n\nSo, remove the error-prone last argument and always us the type of the\nexpression itself.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "698360ca020e8ce4bc84eb44233dba9dbc9b598c",
      "tree": "c0cbb6e320bd29c91abf490651546f19ddda9ab9",
      "parents": [
        "3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 14:56:21 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 15:49:05 2022 +0200"
      },
      "message": "cast_value: assign the new type\n\nThe first two arguments of cast_value() are the new expression and the\ntype wanted for it. This type is then used to calculate the new value.\n\nBut the type of the expression must be assigned separately (usually\nafter the cast because the old and the new expression can refer to\nthe same object).\n\nTo avoid any possible inconsistencies, assign the new type during the\ncasting itself.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "56afb504c0b917a2563b44fabe2f1e92e4c14287",
      "tree": "73cca4ee011daee4ab40a7d19db2bb91b4307682",
      "parents": [
        "5a0004b591e311cb840633144087dee6ecdade17",
        "3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 13:53:18 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 13:53:18 2022 +0200"
      },
      "message": "Merge branch \u0027fixes\u0027 into master\n\n* fix zero/sign extension of integer character constants\n* handle clang\u0027s option \"-meabi gnu\"\n* fix infinite loop when expanding __builtin_object_size() with self-init vars\n"
    },
    {
      "commit": "3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c",
      "tree": "f780af23ebc5de203303205323b33248d5b1be63",
      "parents": [
        "99a5645a0edbafac8eb667e0f341a73bebb5f34d"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun May 22 20:46:58 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Tue May 31 13:49:29 2022 +0200"
      },
      "message": "fix zero/sign extension of integer character constants\n\nAn integer character constant has type \u0027int\u0027 but, subtly enough,\nits value is the one of a \u0027char\u0027 converted to an \u0027int\u0027.\n\nSo, do this conversion.\nAlso set the type of wide character constants from \u0027long\u0027 to \u0027wchar_t\u0027.\n\nLink: https://lore.kernel.org/r/20210927130253.GH2083@kadam\nReported-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nReported-by: Rasmus Villemoes \u003clinux@rasmusvillemoes.dk\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "5a0004b591e311cb840633144087dee6ecdade17",
      "tree": "58e38a987597483c528033ac254f5f4a289516aa",
      "parents": [
        "b4fb2fd8eefb57d1888da06bd56c3b2f78f7cd04",
        "df76096c637951cf1713edf7d34940c814f8cb3d"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun May 22 11:46:26 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun May 22 11:46:26 2022 +0200"
      },
      "message": "Merge branch \u0027xtensa\u0027\n\n* cgcc: add Xtensa support\n"
    },
    {
      "commit": "df76096c637951cf1713edf7d34940c814f8cb3d",
      "tree": "bca4a43d9395d9a5b96a4f892646fcfa1959276b",
      "parents": [
        "c4706aa764f3ae68258ba60be6325a5662900362"
      ],
      "author": {
        "name": "Guennadi Liakhovetski",
        "email": "guennadi.liakhovetski@linux.intel.com",
        "time": "Wed Apr 20 14:31:34 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun May 22 11:45:10 2022 +0200"
      },
      "message": "cgcc: add Xtensa support\n\nAdd support for the Xtensa architecture.\n\nSigned-off-by: Guennadi Liakhovetski \u003cguennadi.liakhovetski@linux.intel.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "99a5645a0edbafac8eb667e0f341a73bebb5f34d",
      "tree": "1cfde6d757adff168125ae4b7023ca6a90a6a966",
      "parents": [
        "b3d7fb1bac881a714fed871db33e98e67b9bf1b6"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Mon May 23 10:55:03 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sun May 22 11:39:27 2022 +0200"
      },
      "message": "handle clang\u0027s option \"-meabi gnu\"\n\nClang has an option \"-meabi \u003carg\u003e\" which is used by the kernel for ARMv7.\nThis kind of option, taking a argument without a separating \u0027\u003d\u0027, can\u0027t\nbe ignored like most other options and must this be special-cased.\n\nSo, add the special case for this option and consume the argument if it\u0027s\none of the valid one.\n\nLink: https://lore.kernel.org/r/20220331110118.vr4miyyytqlssjoi@pengutronix.de\nReported-by: Marc Kleine-Budde \u003cmkl@pengutronix.de\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "b4fb2fd8eefb57d1888da06bd56c3b2f78f7cd04",
      "tree": "306ddd3da66ed458f6e338e5a32442e6e9efdccf",
      "parents": [
        "fbdc046e9561829265588582a0e5926eda1eaa88",
        "76d40fa9e54fdf790f9d1a4b97be93f94d26abfc"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 22:45:29 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 22:45:29 2022 +0200"
      },
      "message": "Merge branch \u0027riscv-zicsr\u0027\n\n* riscv: add the Zicsr extension\n* riscv: add the Zifencei extension\n"
    },
    {
      "commit": "76d40fa9e54fdf790f9d1a4b97be93f94d26abfc",
      "tree": "a0b1b6234f3b1d3b768af498ce39604db21a669f",
      "parents": [
        "54cb689f2b664d379ac070b23fa3d8c814421d3a"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:41 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 21:10:05 2022 +0200"
      },
      "message": "RISC-V: Add the Zifencei extension\n\nRecent versions of binutils default to an ISA spec version that doesn\u0027t\ninclude Zifencei as part of I, so Linux has recently started passing\nthis in -march.\n\n[ Luc Van Oostenryck: move this patch at the start of the series ]\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "54cb689f2b664d379ac070b23fa3d8c814421d3a",
      "tree": "6d8c3359af961f3fa530a9848ce26d4eeab2a16b",
      "parents": [
        "c4706aa764f3ae68258ba60be6325a5662900362"
      ],
      "author": {
        "name": "Palmer Dabbelt",
        "email": "palmer@rivosinc.com",
        "time": "Fri Apr 01 22:00:40 2022 -0700"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 21:09:30 2022 +0200"
      },
      "message": "RISC-V: Add the Zicsr extension\n\nRecent versions of binutils default to an ISA spec version that doesn\u0027t\ninclude Zicsr as part of I, so Linux has recently started passing this\nin -march.\n\n[ Luc Van Oostenryck: move this patch at the start of the series ]\n\nSigned-off-by: Palmer Dabbelt \u003cpalmer@rivosinc.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "fbdc046e9561829265588582a0e5926eda1eaa88",
      "tree": "8f582ca2d8b973bc1f90dd842833789ff3cf0de4",
      "parents": [
        "618f92e7ad155144cc8c97098f7ef86a57aad39d"
      ],
      "author": {
        "name": "Richard Palethorpe",
        "email": "rpalethorpe@suse.com",
        "time": "Mon Mar 21 11:21:19 2022 +0000"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 15:05:46 2022 +0200"
      },
      "message": "Use offsetof macro to silence null ptr subtraction warning\n\nSubtracting (char *)0 is undefined behavior. Newer compilers warn\nabout this unless it is done in system headers.\n\nSigned-off-by: Richard Palethorpe \u003crpalethorpe@suse.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "618f92e7ad155144cc8c97098f7ef86a57aad39d",
      "tree": "6400ba496447aab45b8d627cee30d123d920ed17",
      "parents": [
        "b22b01e5c1c6da0a6eeb6b3bb5d538f493f696b6"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 11:53:52 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 14:47:39 2022 +0200"
      },
      "message": "fix one year off in v0.6.4\u0027s release notes\n\nBernhard Voelker noticed that the date in the release notes\nis one year off. Fix this.\n\nReported-by: Bernhard Voelker \u003cmail@bernhard-voelker.de\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "b22b01e5c1c6da0a6eeb6b3bb5d538f493f696b6",
      "tree": "a939975060225ae16326fb10debf2665de53d33a",
      "parents": [
        "7d990b119a6249af9a1ef4f3df9957d8975b56b2",
        "62dafeef8ba83d210d0ce861476d4071f66fc34a"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 11:21:01 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 11:21:33 2022 +0200"
      },
      "message": "Merge branch \u0027semid\u0027\n\n* semind: Index more symbols\n  For indexing purposes, macros definitions and typedefs are added to the\n  semind database. Functions that are not used in the code are also indexed.\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "7d990b119a6249af9a1ef4f3df9957d8975b56b2",
      "tree": "fd21e6b95ea88839593466e8c6f4db304f942824",
      "parents": [
        "c4706aa764f3ae68258ba60be6325a5662900362",
        "d08822184fe1d4557beca97c2e3599ffc3668e50"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 11:16:24 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 11:18:40 2022 +0200"
      },
      "message": "Merge branch \u0027next-ramsay\u0027\n\n* fix regression disabling the \u0027memcpy-max-count\u0027 check.\n* warn about a \u0027case label\u0027 on empty statement\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "62dafeef8ba83d210d0ce861476d4071f66fc34a",
      "tree": "2de4c4c3bc145b263b810b3eed5c835980c909fb",
      "parents": [
        "99fe3982ff45fc0bef5e5e414b85f87143e71ce5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "gladkov.alexey@gmail.com",
        "time": "Tue Nov 02 15:06:45 2021 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 10:59:45 2022 +0200"
      },
      "message": "dissect: Show typedefs\n\nFor indexing purposes, it is useful to see type definitions.\n\n$ semind search __kernel_ulong_t\n(def) include/uapi/asm-generic/posix_types.h 16 23 typedef unsigned long   __kernel_ulong_t;\n\nSigned-off-by: Alexey Gladkov \u003cgladkov.alexey@gmail.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "99fe3982ff45fc0bef5e5e414b85f87143e71ce5",
      "tree": "74d6d4ee443f368620fd22383205358831953690",
      "parents": [
        "2a5afb6eafe9cd781f149ab53ee6ea8f23010ee5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "gladkov.alexey@gmail.com",
        "time": "Tue Nov 02 15:06:44 2021 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 10:59:45 2022 +0200"
      },
      "message": "dissect: Show macro definitions\n\nAdd the ability to dissect to see macro definitions. The patch does not\nadd full support for the usage of macros, but only their definitions.\n\nSigned-off-by: Alexey Gladkov \u003cgladkov.alexey@gmail.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "2a5afb6eafe9cd781f149ab53ee6ea8f23010ee5",
      "tree": "1912c23af26d651e38cf34839fe8c45469b09f3d",
      "parents": [
        "c4706aa764f3ae68258ba60be6325a5662900362"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "gladkov.alexey@gmail.com",
        "time": "Tue Nov 02 15:06:43 2021 +0100"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 10:59:45 2022 +0200"
      },
      "message": "dissect: Allow to show all symbols\n\nCurrently dissect sees only used symbols. For indexing purposes, it is\nuseful to see all declared symbols.\n\n$ nl -s\\  -w2 ./z.c\n 1 struct foo {\n 2         int member;\n 3 };\n 4 #ifdef OPT\n 5 static void func1(void) {\n 6         struct foo *x;\n 7         return 0;\n 8 }\n 9 #endif\n10 static inline void func2(void) { return; }\n11 void func(void) { return; }\n\n$ ./test-dissect ./z.c\n\nFILE: ./z.c\n\n  11:6                    def   f func                             void ( ... )\n\n$ ./test-dissect --param\u003ddissect-show-all-symbols ./z.c\n\nFILE: ./z.c\n\n   1:8                    def   s foo                              struct foo\n   2:13                   def   m foo.member                       int\n  10:20                   def   f func2                            void ( ... )\n  11:6                    def   f func                             void ( ... )\n\nSigned-off-by: Alexey Gladkov \u003cgladkov.alexey@gmail.com\u003e\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    },
    {
      "commit": "b3d7fb1bac881a714fed871db33e98e67b9bf1b6",
      "tree": "5247da491753239aa0a7e26e7532959928348b2d",
      "parents": [
        "c4706aa764f3ae68258ba60be6325a5662900362"
      ],
      "author": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Fri May 20 22:27:08 2022 +0200"
      },
      "committer": {
        "name": "Luc Van Oostenryck",
        "email": "luc.vanoostenryck@gmail.com",
        "time": "Sat May 21 10:58:37 2022 +0200"
      },
      "message": "fix infinite loop when expanding __builtin_object_size() with self-init vars\n\nexpand_object_size(), used to expand __builtin_object_size(),\nrecursively try to get the parent initializer. This fails miserably\nby looping endlessly when the object is a self-initialized variable.\n\nFor the moment, fix this in the most obvious way: stop the recursion\nand do not expand such variables.\n\nNote: I wouldn\u0027t be surprised if these self-initialized variables create\n      other problems elsewhere. Maybe we should remove their initializer\n      and somehow mark them as \"do not warn about -Wuninitialized\"\n      (well, there is no such warnings *yet*).\n\nSigned-off-by: Luc Van Oostenryck \u003cluc.vanoostenryck@gmail.com\u003e\n"
    }
  ],
  "next": "d08822184fe1d4557beca97c2e3599ffc3668e50"
}
