diff --git a/cpp/ql/src/semmle/code/cpp/Element.qll b/cpp/ql/src/semmle/code/cpp/Element.qll index 77a27d49725..8076f62583a 100644 --- a/cpp/ql/src/semmle/code/cpp/Element.qll +++ b/cpp/ql/src/semmle/code/cpp/Element.qll @@ -197,7 +197,8 @@ class Element extends ElementBase { initialisers(underlyingElement(this), unresolveElement(result), _, _) or exprconv(unresolveElement(result), underlyingElement(this)) or param_decl_bind(underlyingElement(this), _, unresolveElement(result)) or - using_container(unresolveElement(result), underlyingElement(this)) + using_container(unresolveElement(result), underlyingElement(this)) or + static_asserts(unresolveElement(this), _, _, _, underlyingElement(result)) } /** Gets the closest `Element` enclosing this one. */ @@ -278,12 +279,12 @@ class StaticAssert extends Locatable, @static_assert { /** * Gets the expression which this static assertion ensures is true. */ - Expr getCondition() { static_asserts(underlyingElement(this), unresolveElement(result), _, _) } + Expr getCondition() { static_asserts(underlyingElement(this), unresolveElement(result), _, _, _) } /** * Gets the message which will be reported by the compiler if this static assertion fails. */ - string getMessage() { static_asserts(underlyingElement(this), _, result, _) } + string getMessage() { static_asserts(underlyingElement(this), _, result, _, _) } - override Location getLocation() { static_asserts(underlyingElement(this), _, _, result) } + override Location getLocation() { static_asserts(underlyingElement(this), _, _, result, _) } } diff --git a/cpp/ql/src/semmlecode.cpp.dbscheme b/cpp/ql/src/semmlecode.cpp.dbscheme index 025827d85c3..098850d25c4 100644 --- a/cpp/ql/src/semmlecode.cpp.dbscheme +++ b/cpp/ql/src/semmlecode.cpp.dbscheme @@ -508,7 +508,8 @@ static_asserts( unique int id: @static_assert, int condition : @expr ref, string message : string ref, - int location: @location_default ref + int location: @location_default ref, + int enclosing : @element ref ); // each function has an ordered list of parameters diff --git a/cpp/ql/src/semmlecode.cpp.dbscheme.stats b/cpp/ql/src/semmlecode.cpp.dbscheme.stats index 5a46cae4c17..60326c98b90 100644 --- a/cpp/ql/src/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/src/semmlecode.cpp.dbscheme.stats @@ -1,7 +1,7 @@ @compilation -9550 +9552 @externalDataElement @@ -25,7 +25,7 @@ @location_default -8812005 +8813620 @location_stmt @@ -37,43 +37,43 @@ @diagnostic -68684 +68697 @file -60011 +60022 @folder -10943 +10945 @macroinvocation -35573550 +35579191 @function -3467595 +3468230 @fun_decl -3539887 +3540536 @var_decl -5359092 +5359964 @type_decl -1331886 +1332130 @namespace_decl -136843 +136868 @using -291384 +291437 @static_assert @@ -81,11 +81,11 @@ @parameter -4627024 +4627872 @membervariable -305627 +305683 @globalvariable @@ -105,19 +105,19 @@ @derivedtype -4630204 +4463015 @decltype -46996 +47004 @usertype -4193084 +4193852 @mangledname -483589 +483678 @type_mention @@ -125,11 +125,11 @@ @routinetype -430398 +430477 @ptrtomember -12631 +12634 @specifier @@ -173,19 +173,19 @@ @derivation -390189 +390261 @frienddecl -240298 +240342 @comment -1580013 +1580303 @namespace -7686 +7687 @specialnamequalifyingelement @@ -204,8 +204,28 @@ 1664822 +@c_style_cast +4235362 + + +@indirect +294273 + + +@varaccess +5318255 + + +@routineexpr +2265730 + + +@literal +4380627 + + @errorexpr -48706 +48715 @address_of @@ -213,15 +233,11 @@ @reference_to -1058090 - - -@indirect -294273 +1057889 @ref_indirect -1253936 +1253836 @array_to_pointer @@ -229,7 +245,7 @@ @vacuous_destructor_call -5120 +5121 @assume @@ -277,11 +293,11 @@ @preincrexpr -62511 +62522 @predecrexpr -24791 +24796 @conditionalexpr @@ -341,7 +357,7 @@ @pdiffexpr -25076 +25081 @lshiftexpr @@ -377,7 +393,7 @@ @ltexpr -51732 +51742 @geexpr @@ -409,7 +425,7 @@ @assignmulexpr -6907 +6909 @assigndivexpr @@ -457,7 +473,7 @@ @commaexpr -10734 +10725 @subscriptexpr @@ -469,7 +485,7 @@ @callexpr -226789 +226819 @vastartexpr @@ -477,7 +493,7 @@ @vaargexpr -986 +987 @vaendexpr @@ -488,28 +504,24 @@ 30 -@varaccess -5318255 - - @thisaccess 1167122 @new_expr -32127 +32133 @delete_expr -5964 +5966 @throw_expr -22313 +22317 @condition_decl -7028 +7007 @braced_init_list @@ -517,7 +529,7 @@ @type_id -4418 +4419 @runtime_sizeof @@ -536,10 +548,6 @@ 156384 -@routineexpr -2265918 - - @type_operand 123307 @@ -636,10 +644,6 @@ 109 -@literal -4380627 - - @uuidof 845 @@ -661,15 +665,15 @@ @ctordirectinit -90176 +90192 @ctorvirtualinit -6228 +6229 @ctorfieldinit -196010 +196046 @ctordelegatinginit @@ -677,7 +681,7 @@ @dtordirectdestruct -29134 +29139 @dtorvirtualdestruct @@ -685,11 +689,11 @@ @dtorfielddestruct -29901 +29907 @static_cast -214716 +214756 @reinterpret_cast @@ -697,15 +701,11 @@ @const_cast -5307 +5308 @dynamic_cast -986 - - -@c_style_cast -4235362 +987 @lambdaexpr @@ -713,7 +713,7 @@ @param_ref -85877 +85893 @noopexpr @@ -817,7 +817,7 @@ @noexceptexpr -17522 +17525 @builtinshufflevector @@ -829,7 +829,7 @@ @builtinaddressof -3969 +3970 @vec_fill @@ -856,12 +856,20 @@ 1269739 +@stmt_return +1130183 + + +@stmt_block +1325089 + + @stmt_if 523914 @stmt_while -30998 +30992 @stmt_goto @@ -872,14 +880,6 @@ 81478 -@stmt_return -1130009 - - -@stmt_block -1325000 - - @stmt_end_test_while 149714 @@ -901,7 +901,7 @@ @stmt_try_block -17960 +17963 @stmt_microsoft_try @@ -909,7 +909,7 @@ @stmt_decl -613064 +613078 @stmt_set_vla_size @@ -948,40 +948,40 @@ 3 +@ppd_plain_include +290757 + + @ppd_if -156064 +156093 @ppd_ifdef -61075 +61086 @ppd_ifndef -83312 +83327 @ppd_elif -20625 +20628 @ppd_else -57654 +57664 @ppd_endif -300452 - - -@ppd_plain_include -290704 +300507 @ppd_define -318007 +318065 @ppd_undef -19243 +19247 @ppd_line @@ -1038,11 +1038,11 @@ compilations -9550 +9552 id -9550 +9552 cwd @@ -1060,7 +1060,7 @@ 1 2 -9550 +9552 @@ -1382,11 +1382,11 @@ compilation_compiling_files -9550 +9552 id -9550 +9552 num @@ -1394,7 +1394,7 @@ file -4846 +4847 @@ -1408,7 +1408,7 @@ 1 2 -9550 +9552 @@ -1424,7 +1424,7 @@ 1 2 -9550 +9552 @@ -1477,7 +1477,7 @@ 2 3 -4550 +4551 3 @@ -1498,7 +1498,7 @@ 1 2 -4846 +4847 @@ -1508,11 +1508,11 @@ compilation_time -38114 +38121 id -9528 +9530 num @@ -1524,7 +1524,7 @@ seconds -12390 +13401 @@ -1538,7 +1538,7 @@ 1 2 -9528 +9530 @@ -1554,7 +1554,7 @@ 4 5 -9528 +9530 @@ -1568,14 +1568,19 @@ 12 +2 +3 +10 + + 3 4 -2576 +2588 4 5 -6951 +6931 @@ -1621,8 +1626,8 @@ 12 -1130 -1131 +1222 +1223 10 @@ -1669,8 +1674,8 @@ 12 -7 -8 +6 +7 10 @@ -1679,13 +1684,13 @@ 10 -582 -583 +613 +614 10 -658 -659 +724 +725 10 @@ -1702,22 +1707,22 @@ 1 2 -8355 +9420 2 3 -2379 +2719 3 -4 -899 +6 +1096 -4 -646 -756 +6 +630 +164 @@ -1733,7 +1738,7 @@ 1 2 -12390 +13401 @@ -1749,12 +1754,17 @@ 1 2 -10954 +11932 2 3 -1436 +1458 + + +3 +4 +10 @@ -1764,15 +1774,15 @@ diagnostic_for -846937 +847092 diagnostic -68684 +68697 compilation -9221 +9223 file_number @@ -1780,7 +1790,7 @@ file_number_diagnostic_number -6502 +6503 @@ -1794,12 +1804,12 @@ 1 2 -9254 +9256 2 3 -56732 +56743 254 @@ -1820,7 +1830,7 @@ 1 2 -68684 +68697 @@ -1836,7 +1846,7 @@ 1 2 -68684 +68697 @@ -1857,7 +1867,7 @@ 7 8 -5811 +5812 8 @@ -1893,7 +1903,7 @@ 1 2 -9221 +9223 @@ -1914,7 +1924,7 @@ 7 8 -5811 +5812 8 @@ -2008,7 +2018,7 @@ 5 6 -953 +954 7 @@ -2059,7 +2069,7 @@ 10 11 -953 +954 14 @@ -2094,7 +2104,7 @@ 254 255 -2620 +2621 309 @@ -2115,7 +2125,7 @@ 1 2 -6502 +6503 @@ -2125,19 +2135,19 @@ compilation_finished -9550 +9552 id -9550 +9552 cpu_seconds -7993 +8378 elapsed_seconds -197 +208 @@ -2151,7 +2161,7 @@ 1 2 -9550 +9552 @@ -2167,7 +2177,7 @@ 1 2 -9550 +9552 @@ -2183,17 +2193,17 @@ 1 2 -6864 +7391 2 3 -855 +833 3 -8 -274 +6 +153 @@ -2209,12 +2219,12 @@ 1 2 -7500 +8126 2 3 -493 +252 @@ -2230,66 +2240,71 @@ 1 2 -32 +54 2 3 -32 +21 3 4 -21 - - -9 -10 10 -12 -13 +5 +6 10 -16 -17 +6 +7 10 -26 -27 +8 +9 10 -38 -39 +21 +22 10 -99 -100 +29 +30 10 -100 -101 +44 +45 10 -140 -141 +82 +83 10 -195 -196 +102 +103 10 -221 -222 +147 +148 +10 + + +183 +184 +10 + + +232 +233 10 @@ -2306,66 +2321,71 @@ 1 2 -32 +54 2 3 -32 +21 3 4 -21 - - -9 -10 10 -11 -12 +5 +6 10 -16 -17 +6 +7 10 -25 -26 +8 +9 10 -37 -38 +21 +22 10 -77 -78 +28 +29 10 -89 -90 +43 +44 10 -134 -135 +80 +81 10 -176 -177 +86 +87 10 -185 -186 +142 +143 +10 + + +166 +167 +10 + + +190 +191 10 @@ -5269,11 +5289,11 @@ header_to_external_package -8530 +8532 fileid -8530 +8532 package @@ -5291,7 +5311,7 @@ 1 2 -8530 +8532 @@ -6560,31 +6580,31 @@ locations_default -8812005 +8813620 id -8812005 +8813620 container -70954 +70967 startLine -150604 +150631 startColumn -5460 +5461 endLine -150428 +150456 endColumn -10625 +10627 @@ -6598,7 +6618,7 @@ 1 2 -8812005 +8813620 @@ -6614,7 +6634,7 @@ 1 2 -8812005 +8813620 @@ -6630,7 +6650,7 @@ 1 2 -8812005 +8813620 @@ -6646,7 +6666,7 @@ 1 2 -8812005 +8813620 @@ -6662,7 +6682,7 @@ 1 2 -8812005 +8813620 @@ -6678,62 +6698,62 @@ 1 2 -11524 +11526 2 19 -6096 +6097 19 25 -5482 +5483 25 31 -5515 +5516 31 41 -5822 +5823 41 54 -5526 +5527 54 72 -5603 +5604 72 99 -5416 +5417 99 137 -5383 +5384 137 220 -5328 +5329 220 430 -5328 +5329 430 20913 -3925 +3926 @@ -6749,57 +6769,57 @@ 1 2 -11524 +11526 2 15 -6008 +6009 15 20 -6140 +6141 20 25 -5548 +5549 25 32 -6096 +6097 32 41 -5679 +5680 41 53 -5723 +5724 53 71 -5592 +5593 71 99 -5449 +5450 99 158 -5328 +5329 158 351 -5361 +5362 351 @@ -6820,57 +6840,57 @@ 1 2 -11524 +11526 2 4 -6008 +6009 4 8 -6546 +6547 8 11 -5394 +5395 11 14 -5778 +5779 14 18 -6250 +6251 18 23 -5756 +5757 23 29 -5833 +5834 29 37 -5690 +5691 37 50 -5668 +5669 50 78 -5383 +5384 78 @@ -6891,57 +6911,57 @@ 1 2 -11524 +11526 2 15 -5986 +5987 15 20 -6162 +6163 20 25 -5493 +5494 25 32 -6107 +6108 32 41 -5668 +5669 41 53 -5723 +5724 53 70 -5383 +5384 70 96 -5339 +5340 96 153 -5394 +5395 153 333 -5350 +5351 333 @@ -6962,57 +6982,57 @@ 1 2 -11524 +11526 2 14 -5734 +5735 14 19 -6118 +6119 19 23 -5712 +5713 23 28 -6414 +6415 28 33 -5515 +5516 33 40 -5953 +5955 40 47 -5350 +5351 47 57 -5603 +5604 57 69 -5636 +5637 69 91 -5328 +5329 91 @@ -7033,52 +7053,52 @@ 1 2 -30844 +30850 2 3 -18026 +18029 3 4 -17949 +17953 4 5 -9714 +9716 5 7 -13706 +13708 7 9 -13410 +13412 9 13 -13201 +13204 13 32 -11568 +11570 32 127 -11304 +11306 127 6472 -10877 +10879 @@ -7094,42 +7114,42 @@ 1 2 -55647 +55657 2 3 -33432 +33438 3 4 -9901 +9903 4 5 -8432 +8433 5 8 -12905 +12908 8 27 -11491 +11493 27 123 -11337 +11339 123 6472 -7456 +7457 @@ -7145,52 +7165,52 @@ 1 2 -31952 +31957 2 3 -17861 +17865 3 4 -19791 +19795 4 5 -9583 +9585 5 7 -13914 +13917 7 9 -13826 +13829 9 13 -12708 +12710 13 27 -11480 +11482 27 62 -11348 +11350 62 153 -8136 +8137 @@ -7206,22 +7226,22 @@ 1 2 -112950 +112971 2 3 -17412 +17415 3 7 -12533 +12535 7 184 -7708 +7709 @@ -7237,52 +7257,52 @@ 1 2 -31798 +31804 2 3 -17774 +17777 3 4 -18640 +18643 4 5 -9868 +9870 5 7 -13728 +13730 7 9 -13772 +13774 9 13 -12730 +12732 13 29 -11655 +11657 29 74 -11348 +11350 74 258 -9287 +9289 @@ -7603,52 +7623,52 @@ 1 2 -30559 +30565 2 3 -18059 +18062 3 4 -17807 +17810 4 5 -9868 +9870 5 7 -13772 +13774 7 9 -13454 +13456 9 13 -13048 +13050 13 31 -11458 +11460 31 124 -11293 +11296 124 6472 -11107 +11109 @@ -7664,42 +7684,42 @@ 1 2 -55362 +55372 2 3 -33333 +33339 3 4 -9868 +9870 4 5 -8541 +8543 5 8 -13103 +13105 8 27 -11326 +11328 27 121 -11293 +11296 121 6472 -7598 +7600 @@ -7715,22 +7735,22 @@ 1 2 -112161 +112181 2 3 -17247 +17251 3 7 -12072 +12074 7 46 -8947 +8949 @@ -7746,57 +7766,57 @@ 1 2 -31645 +31650 2 3 -17938 +17942 3 4 -19737 +19740 4 5 -9605 +9607 5 6 -7861 +7863 6 7 -6129 +6130 7 9 -13837 +13840 9 13 -12708 +12710 13 27 -11491 +11493 27 62 -11348 +11350 62 153 -8125 +8126 @@ -7812,52 +7832,52 @@ 1 2 -31546 +31552 2 3 -17741 +17744 3 4 -18629 +18632 4 5 -9934 +9936 5 7 -13815 +13818 7 9 -13772 +13774 9 13 -12785 +12787 13 29 -11513 +11515 29 74 -11359 +11361 74 258 -9331 +9332 @@ -7873,7 +7893,7 @@ 1 2 -4210 +4211 2 @@ -7888,7 +7908,7 @@ 4 5 -646 +647 5 @@ -7929,17 +7949,17 @@ 1 2 -4835 +4836 2 3 -1282 +1283 3 4 -953 +954 4 @@ -7980,7 +8000,7 @@ 1 2 -4243 +4244 2 @@ -7995,7 +8015,7 @@ 4 5 -635 +636 5 @@ -8036,17 +8056,17 @@ 1 2 -4868 +4869 2 3 -1326 +1327 3 4 -942 +943 4 @@ -8087,7 +8107,7 @@ 1 2 -4243 +4244 2 @@ -8102,7 +8122,7 @@ 4 5 -635 +636 5 @@ -11606,23 +11626,23 @@ numlines -499159 +499251 element_id -492197 +492287 num_lines -9342 +9343 num_code -7291 +7293 num_comment -3936 +3937 @@ -11636,12 +11656,12 @@ 1 2 -485311 +485400 2 7 -6886 +6887 @@ -11657,12 +11677,12 @@ 1 2 -485366 +485454 2 7 -6831 +6832 @@ -11678,7 +11698,7 @@ 1 2 -492120 +492210 2 @@ -11699,7 +11719,7 @@ 1 2 -4254 +4255 2 @@ -11750,12 +11770,12 @@ 1 2 -4320 +4321 2 3 -1260 +1261 3 @@ -11801,12 +11821,12 @@ 1 2 -4309 +4310 2 3 -1260 +1261 3 @@ -11847,7 +11867,7 @@ 1 2 -3179 +3180 2 @@ -11882,7 +11902,7 @@ 101 7978 -328 +329 @@ -11898,7 +11918,7 @@ 1 2 -3201 +3202 2 @@ -11908,7 +11928,7 @@ 3 4 -635 +636 4 @@ -11918,7 +11938,7 @@ 6 10 -635 +636 10 @@ -11949,7 +11969,7 @@ 1 2 -3190 +3191 2 @@ -11959,7 +11979,7 @@ 3 4 -635 +636 4 @@ -11984,7 +12004,7 @@ 27 34 -317 +318 @@ -12000,7 +12020,7 @@ 1 2 -1885 +1886 2 @@ -12015,12 +12035,12 @@ 4 7 -328 +329 7 13 -328 +329 14 @@ -12051,7 +12071,7 @@ 1 2 -1896 +1897 2 @@ -12071,7 +12091,7 @@ 7 13 -328 +329 13 @@ -12102,7 +12122,7 @@ 1 2 -1896 +1897 2 @@ -12117,7 +12137,7 @@ 4 7 -328 +329 7 @@ -12147,11 +12167,11 @@ diagnostics -68684 +68697 id -68684 +68697 severity @@ -12167,7 +12187,7 @@ full_error_message -59474 +59485 location @@ -12185,7 +12205,7 @@ 1 2 -68684 +68697 @@ -12201,7 +12221,7 @@ 1 2 -68684 +68697 @@ -12217,7 +12237,7 @@ 1 2 -68684 +68697 @@ -12233,7 +12253,7 @@ 1 2 -68684 +68697 @@ -12249,7 +12269,7 @@ 1 2 -68684 +68697 @@ -12665,7 +12685,7 @@ 1 2 -59463 +59474 841 @@ -12686,7 +12706,7 @@ 1 2 -59474 +59485 @@ -12702,7 +12722,7 @@ 1 2 -59474 +59485 @@ -12718,7 +12738,7 @@ 1 2 -59474 +59485 @@ -12734,7 +12754,7 @@ 1 2 -59474 +59485 @@ -12844,19 +12864,19 @@ files -60011 +60022 id -60011 +60022 name -60011 +60022 simple -41052 +41060 ext @@ -12878,7 +12898,7 @@ 1 2 -60011 +60022 @@ -12894,7 +12914,7 @@ 1 2 -60011 +60022 @@ -12910,7 +12930,7 @@ 1 2 -60011 +60022 @@ -12926,7 +12946,7 @@ 1 2 -60011 +60022 @@ -12942,7 +12962,7 @@ 1 2 -60011 +60022 @@ -12958,7 +12978,7 @@ 1 2 -60011 +60022 @@ -12974,7 +12994,7 @@ 1 2 -60011 +60022 @@ -12990,7 +13010,7 @@ 1 2 -60011 +60022 @@ -13006,17 +13026,17 @@ 1 2 -31173 +31179 2 3 -6195 +6196 3 7 -3234 +3235 7 @@ -13037,17 +13057,17 @@ 1 2 -31173 +31179 2 3 -6195 +6196 3 7 -3234 +3235 7 @@ -13068,12 +13088,12 @@ 1 2 -36699 +36706 2 3 -3782 +3783 3 @@ -13094,7 +13114,7 @@ 1 2 -41052 +41060 @@ -13352,19 +13372,19 @@ folders -10943 +10945 id -10943 +10945 name -10943 +10945 simple -3135 +3136 @@ -13378,7 +13398,7 @@ 1 2 -10943 +10945 @@ -13394,7 +13414,7 @@ 1 2 -10943 +10945 @@ -13410,7 +13430,7 @@ 1 2 -10943 +10945 @@ -13426,7 +13446,7 @@ 1 2 -10943 +10945 @@ -13508,15 +13528,15 @@ containerparent -70932 +70945 parent -10943 +10945 child -70932 +70945 @@ -13581,7 +13601,7 @@ 1 2 -70932 +70945 @@ -13591,11 +13611,11 @@ fileannotations -5149627 +5150571 id -4824 +4825 kind @@ -13603,11 +13623,11 @@ name -54616 +54626 value -44638 +44646 @@ -13842,42 +13862,42 @@ 1 2 -8925 +8927 2 3 -6030 +6031 3 6 -4517 +4518 6 8 -4451 +4452 8 14 -4407 +4408 14 18 -3914 +3915 18 21 -4243 +4244 21 34 -4396 +4397 34 @@ -13887,12 +13907,12 @@ 129 236 -4155 +4156 236 395 -4111 +4112 395 @@ -13913,7 +13933,7 @@ 1 2 -54616 +54626 @@ -13929,12 +13949,12 @@ 1 2 -9978 +9979 2 3 -8048 +8049 3 @@ -13944,42 +13964,42 @@ 4 6 -3958 +3959 6 10 -4879 +4880 10 14 -3486 +3487 14 18 -4495 +4496 18 23 -4199 +4200 23 44 -4396 +4397 44 97 -4155 +4156 97 405 -4100 +4101 421 @@ -14000,7 +14020,7 @@ 1 2 -6896 +6898 2 @@ -14010,7 +14030,7 @@ 5 8 -3234 +3235 8 @@ -14030,17 +14050,17 @@ 25 40 -3234 +3235 40 195 -3519 +3520 195 207 -3508 +3509 207 @@ -14055,12 +14075,12 @@ 328 407 -3837 +3838 407 441 -1282 +1283 @@ -14076,7 +14096,7 @@ 1 2 -44627 +44635 2 @@ -14097,12 +14117,12 @@ 1 2 -6918 +6920 2 5 -2510 +2511 5 @@ -14112,7 +14132,7 @@ 8 16 -3497 +3498 16 @@ -14127,17 +14147,17 @@ 21 31 -3881 +3882 31 41 -3530 +3531 41 54 -3530 +3531 54 @@ -14448,19 +14468,19 @@ macroinvocations -35573550 +35579191 id -35573550 +35579191 macro_id -81217 +81232 location -761081 +761220 kind @@ -14478,7 +14498,7 @@ 1 2 -35573550 +35579191 @@ -14494,7 +14514,7 @@ 1 2 -35573550 +35579191 @@ -14510,7 +14530,7 @@ 1 2 -35573550 +35579191 @@ -14526,52 +14546,52 @@ 1 2 -17017 +17020 2 3 -16557 +16560 3 4 -3574 +3575 4 6 -7193 +7194 6 11 -6896 +6898 11 19 -6173 +6174 19 40 -6173 +6174 40 105 -6195 +6196 105 487 -6107 +6108 488 196960 -5328 +5329 @@ -14587,32 +14607,32 @@ 1 2 -43213 +43221 2 3 -10745 +10747 3 4 -5339 +5340 4 6 -6973 +6975 6 13 -6721 +6722 13 66 -6107 +6108 66 @@ -14633,12 +14653,12 @@ 1 2 -75077 +75091 2 3 -6140 +6141 @@ -14654,7 +14674,7 @@ 1 2 -284333 +284418 2 @@ -14664,32 +14684,32 @@ 3 4 -43443 +43451 4 5 -58586 +58596 5 8 -63564 +63575 8 17 -61151 +61163 17 80 -57149 +57160 80 258137 -15372 +15375 @@ -14705,12 +14725,12 @@ 1 2 -712385 +712516 2 354 -48695 +48704 @@ -14726,7 +14746,7 @@ 1 2 -761081 +761220 @@ -14745,8 +14765,8 @@ 10 -3216594 -3216595 +3216514 +3216515 10 @@ -14799,15 +14819,15 @@ macroparent -31697519 +31702483 id -31697519 +31702483 parent_id -24675496 +24679513 @@ -14821,7 +14841,7 @@ 1 2 -31697519 +31702483 @@ -14837,17 +14857,17 @@ 1 2 -18986039 +18989189 2 3 -4852278 +4853014 3 88 -837178 +837309 @@ -14935,11 +14955,11 @@ macro_argument_unexpanded -92630311 +92646221 invocation -27414610 +27419041 argument_index @@ -14947,7 +14967,7 @@ text -312612 +312669 @@ -14961,22 +14981,22 @@ 1 2 -7655065 +7656336 2 3 -11464681 +11466332 3 4 -6260141 +6261277 4 67 -2034721 +2035094 @@ -14992,22 +15012,22 @@ 1 2 -7723004 +7724288 2 3 -11618553 +11620232 3 4 -6088758 +6089863 4 67 -1984293 +1984656 @@ -15023,7 +15043,7 @@ 50787 50788 -635 +636 50989 @@ -15031,8 +15051,8 @@ 54 -756485 -2500192 +756484 +2500138 32 @@ -15049,7 +15069,7 @@ 2 3 -635 +636 13 @@ -15075,57 +15095,57 @@ 1 2 -37895 +37902 2 3 -61118 +61163 3 4 -14090 +14092 4 5 -42138 +42135 5 8 -25296 +25289 8 12 -15120 +15112 12 16 -21765 +21780 16 21 -23936 +23940 21 41 -24967 +24971 41 121 -23794 +23787 121 567376 -22489 +22493 @@ -15141,17 +15161,17 @@ 1 2 -226021 +226063 2 3 -76294 +76308 3 9 -10296 +10298 @@ -15161,11 +15181,11 @@ macro_argument_expanded -92630311 +92646221 invocation -27414610 +27419041 argument_index @@ -15173,7 +15193,7 @@ text -189409 +189444 @@ -15187,22 +15207,22 @@ 1 2 -7655065 +7656336 2 3 -11464681 +11466332 3 4 -6260141 +6261277 4 67 -2034721 +2035094 @@ -15218,22 +15238,22 @@ 1 2 -11162979 +11164761 2 3 -9892749 +9894243 3 4 -5268762 +5269716 4 9 -1090118 +1090318 @@ -15249,7 +15269,7 @@ 50787 50788 -635 +636 50989 @@ -15257,8 +15277,8 @@ 54 -756485 -2500192 +756484 +2500138 32 @@ -15301,22 +15321,22 @@ 1 2 -22862 +22866 2 3 -38180 +38220 3 4 -6239 +6240 4 5 -15186 +15178 5 @@ -15326,37 +15346,37 @@ 6 7 -22039 +22032 7 9 -15471 +15463 9 15 -16480 +16494 15 28 -14254 +14257 28 77 -14331 +14322 77 337 -14320 +14322 338 -1133308 -7291 +1133296 +7293 @@ -15372,17 +15392,17 @@ 1 2 -95614 +95632 2 3 -79474 +79488 3 6 -14243 +14246 6 @@ -15397,15 +15417,15 @@ functions -3467595 +3468230 id -3467595 +3468230 name -288335 +288388 kind @@ -15423,7 +15443,7 @@ 1 2 -3467595 +3468230 @@ -15439,7 +15459,7 @@ 1 2 -3467595 +3468230 @@ -15455,27 +15475,27 @@ 1 2 -195363 +195399 2 3 -28311 +28316 3 5 -26074 +26079 5 13 -22160 +22164 13 123517 -16425 +16428 @@ -15491,7 +15511,7 @@ 1 2 -286877 +286930 2 @@ -15598,15 +15618,15 @@ function_entry_point -1008374 +1008526 id -1005447 +1005609 entry_point -1008374 +1008526 @@ -15620,12 +15640,12 @@ 1 2 -1002793 +1002966 2 9 -2653 +2643 @@ -15641,7 +15661,7 @@ 1 2 -1008374 +1008526 @@ -15651,15 +15671,15 @@ function_return_type -3477760 +3478397 id -3467124 +3467759 return_type -1023375 +1023562 @@ -15673,12 +15693,12 @@ 1 2 -3456981 +3457614 2 6 -10142 +10144 @@ -15694,17 +15714,17 @@ 1 2 -299103 +299158 2 3 -662571 +662692 3 84263 -61700 +61711 @@ -15725,37 +15745,37 @@ function_deleted -56173 +56184 id -56173 +56184 function_defaulted -12927 +12930 id -12927 +12930 member_function_this_type -523250 +523345 id -522921 +523345 this_type -171339 +171370 @@ -15769,12 +15789,7 @@ 1 2 -522592 - - -2 -3 -328 +523345 @@ -15790,32 +15805,32 @@ 1 2 -62533 +62544 2 3 -44550 +44558 3 4 -22291 +22295 4 5 -15011 +15013 5 7 -13684 +13686 7 36 -12872 +12875 40 @@ -15830,27 +15845,27 @@ fun_decls -3543155 +3543804 id -3539887 +3540536 function -3374162 +3374780 type_id -1010304 +1010489 name -256789 +256836 location -795291 +795437 @@ -15864,7 +15879,7 @@ 1 2 -3539887 +3540536 @@ -15880,12 +15895,12 @@ 1 2 -3536905 +3537553 2 4 -2982 +2983 @@ -15901,7 +15916,7 @@ 1 2 -3539887 +3540536 @@ -15917,7 +15932,7 @@ 1 2 -3539887 +3540536 @@ -15933,12 +15948,12 @@ 1 2 -3238163 +3238757 2 9 -135998 +136023 @@ -15954,12 +15969,12 @@ 1 2 -3357506 +3358122 2 6 -16655 +16658 @@ -15975,7 +15990,7 @@ 1 2 -3374162 +3374780 @@ -15991,12 +16006,12 @@ 1 2 -3286541 +3287143 2 9 -87621 +87637 @@ -16012,17 +16027,17 @@ 1 2 -280276 +280327 2 3 -660948 +661069 3 89606 -69079 +69092 @@ -16038,17 +16053,17 @@ 1 2 -292107 +292161 2 3 -657297 +657417 3 83378 -60899 +60910 @@ -16064,12 +16079,12 @@ 1 2 -943780 +943952 2 7512 -66524 +66536 @@ -16085,17 +16100,17 @@ 1 2 -912924 +913091 2 6 -80132 +80146 6 22467 -17247 +17251 @@ -16111,32 +16126,32 @@ 1 2 -153521 +153549 2 3 -29298 +29303 3 4 -15932 +15935 4 6 -19517 +19521 6 13 -20197 +20201 13 123766 -18322 +18325 @@ -16152,32 +16167,32 @@ 1 2 -164146 +164176 2 3 -28476 +28481 3 4 -14451 +14454 4 7 -21633 +21637 7 25 -19638 +19641 25 123501 -8443 +8444 @@ -16193,17 +16208,17 @@ 1 2 -224289 +224330 2 5 -20866 +20870 5 63265 -11633 +11636 @@ -16219,27 +16234,27 @@ 1 2 -164639 +164669 2 3 -43454 +43462 3 4 -16436 +16439 4 8 -20570 +20574 8 8921 -11688 +11690 @@ -16255,27 +16270,27 @@ 1 2 -522657 +522753 2 3 -143860 +143887 3 5 -64847 +64858 5 125 -59682 +59693 125 3043 -4243 +4244 @@ -16291,22 +16306,22 @@ 1 2 -537581 +537679 2 3 -156821 +156850 3 9 -64331 +64343 9 3043 -36557 +36564 @@ -16322,17 +16337,17 @@ 1 2 -701661 +701790 2 4 -61776 +61788 4 1522 -31853 +31859 @@ -16348,12 +16363,12 @@ 1 2 -770291 +770432 2 134 -25000 +25004 @@ -16363,11 +16378,11 @@ fun_def -1230547 +1230773 id -1230547 +1230773 @@ -16590,26 +16605,26 @@ fun_decl_empty_throws -1420692 +1420952 fun_decl -1420692 +1420952 fun_decl_noexcept -32905 +32912 fun_decl -32116 +32122 constant -32785 +32791 @@ -16623,7 +16638,7 @@ 1 2 -31327 +31332 2 @@ -16644,7 +16659,7 @@ 1 2 -32664 +32670 2 @@ -16659,11 +16674,11 @@ fun_decl_empty_noexcept -391878 +391950 fun_decl -391878 +391950 @@ -16718,11 +16733,11 @@ param_decl_bind -4650566 +4651418 id -4650566 +4651418 index @@ -16730,7 +16745,7 @@ fun_decl -3071122 +3071685 @@ -16744,7 +16759,7 @@ 1 2 -4650566 +4651418 @@ -16760,7 +16775,7 @@ 1 2 -4650566 +4651418 @@ -16858,22 +16873,22 @@ 1 2 -2194832 +2195234 2 3 -478479 +478567 3 4 -242666 +242711 4 65 -155143 +155172 @@ -16889,22 +16904,22 @@ 1 2 -2194832 +2195234 2 3 -478479 +478567 3 4 -242666 +242711 4 65 -155143 +155172 @@ -16914,27 +16929,27 @@ var_decls -5367940 +5368814 id -5359092 +5359964 variable -5131261 +5132080 type_id -2007363 +2007720 name -126283 +126307 location -1232192 +1232418 @@ -16948,7 +16963,7 @@ 1 2 -5359092 +5359964 @@ -16964,12 +16979,12 @@ 1 2 -5350429 +5351300 2 4 -8662 +8663 @@ -16985,7 +17000,7 @@ 1 2 -5359092 +5359964 @@ -17001,7 +17016,7 @@ 1 2 -5359048 +5359920 2 @@ -17022,12 +17037,12 @@ 1 2 -4943803 +4944577 2 9 -187457 +187503 @@ -17043,12 +17058,12 @@ 1 2 -5095931 +5096734 2 7 -35329 +35346 @@ -17064,12 +17079,12 @@ 1 2 -5113695 +5114511 2 3 -17565 +17569 @@ -17085,12 +17100,12 @@ 1 2 -5023069 +5023869 2 9 -108191 +108211 @@ -17106,22 +17121,22 @@ 1 2 -1580539 +1580829 2 3 -228850 +228892 3 11 -156942 +156948 11 5924 -41031 +41049 @@ -17137,22 +17152,22 @@ 1 2 -1604728 +1605022 2 3 -219618 +219658 3 13 -151108 +151125 13 5424 -31908 +31914 @@ -17168,17 +17183,17 @@ 1 2 -1832537 +1832862 2 5 -151207 +151235 5 772 -23618 +23622 @@ -17194,17 +17209,17 @@ 1 2 -1758162 +1758473 2 4 -154464 +154470 4 3608 -94737 +94776 @@ -17220,42 +17235,42 @@ 1 2 -52083 +52159 2 3 -19276 +19236 3 4 -10910 +10890 4 5 -7686 +7687 5 8 -10515 +10517 8 15 -9506 +9508 15 47 -9528 +9530 47 165630 -6776 +6777 @@ -17271,37 +17286,37 @@ 1 2 -54901 +54977 2 3 -18826 +18786 3 4 -11809 +11789 4 6 -11195 +11197 6 11 -10734 +10736 11 27 -9484 +9486 27 164602 -9331 +9332 @@ -17317,32 +17332,32 @@ 1 2 -76283 +76319 2 3 -16897 +16878 3 4 -8859 +8861 4 7 -10471 +10473 7 27 -9517 +9519 27 125807 -4254 +4255 @@ -17358,32 +17373,32 @@ 1 2 -72807 +72820 2 3 -19024 +19027 3 4 -6973 +6975 4 7 -11184 +11186 7 21 -9747 +9749 21 10073 -6546 +6547 @@ -17399,22 +17414,22 @@ 1 2 -892233 +892484 2 3 -149124 +149063 3 6 -113389 +113420 6 128450 -77445 +77449 @@ -17430,22 +17445,22 @@ 1 2 -940983 +941244 2 3 -114551 +114484 3 6 -102632 +102662 6 128224 -74024 +74027 @@ -17461,17 +17476,17 @@ 1 2 -1055162 +1055377 2 3 -85099 +85093 3 118388 -91930 +91947 @@ -17487,12 +17502,12 @@ 1 2 -1223223 +1223447 2 52 -8969 +8971 @@ -17502,11 +17517,11 @@ var_def -2437137 +2437474 id -2437137 +2437474 @@ -17576,19 +17591,19 @@ type_decls -1331886 +1332130 id -1331886 +1332130 type_id -1300142 +1300380 location -1086621 +1086820 @@ -17602,7 +17617,7 @@ 1 2 -1331886 +1332130 @@ -17618,7 +17633,7 @@ 1 2 -1331886 +1332130 @@ -17634,12 +17649,12 @@ 1 2 -1277050 +1277284 2 24 -23092 +23096 @@ -17655,12 +17670,12 @@ 1 2 -1278344 +1278578 2 24 -21798 +21802 @@ -17676,12 +17691,12 @@ 1 2 -1031171 +1031360 2 506 -55450 +55460 @@ -17697,12 +17712,12 @@ 1 2 -1032651 +1032840 2 506 -53969 +53979 @@ -17712,45 +17727,45 @@ type_def -937551 +937723 id -937551 +937723 type_decl_top -268642 +268691 type_decl -268642 +268691 namespace_decls -136843 +136868 id -136843 +136868 namespace_id -7675 +7676 location -122226 +122249 bodylocation -122555 +122578 @@ -17764,7 +17779,7 @@ 1 2 -136843 +136868 @@ -17780,7 +17795,7 @@ 1 2 -136843 +136868 @@ -17796,7 +17811,7 @@ 1 2 -136843 +136868 @@ -17812,7 +17827,7 @@ 1 2 -3618 +3619 2 @@ -17827,7 +17842,7 @@ 4 7 -646 +647 7 @@ -17863,7 +17878,7 @@ 1 2 -3618 +3619 2 @@ -17878,7 +17893,7 @@ 4 7 -646 +647 7 @@ -17914,7 +17929,7 @@ 1 2 -3618 +3619 2 @@ -17929,7 +17944,7 @@ 4 7 -646 +647 7 @@ -17965,12 +17980,12 @@ 1 2 -113849 +113870 2 8 -8377 +8378 @@ -17986,12 +18001,12 @@ 1 2 -113849 +113870 2 8 -8377 +8378 @@ -18007,7 +18022,7 @@ 1 2 -121481 +121503 2 @@ -18028,12 +18043,12 @@ 1 2 -114540 +114561 2 11 -8015 +8016 @@ -18049,12 +18064,12 @@ 1 2 -114540 +114561 2 9 -8015 +8016 @@ -18070,7 +18085,7 @@ 1 2 -122161 +122183 2 @@ -18085,19 +18100,19 @@ usings -291384 +291437 id -291384 +291437 element_id -46392 +46401 location -23859 +23864 @@ -18111,7 +18126,7 @@ 1 2 -291384 +291437 @@ -18127,7 +18142,7 @@ 1 2 -291384 +291437 @@ -18143,7 +18158,7 @@ 1 2 -39386 +39393 2 @@ -18153,7 +18168,7 @@ 4 127 -3256 +3257 @@ -18169,7 +18184,7 @@ 1 2 -39386 +39393 2 @@ -18179,7 +18194,7 @@ 4 127 -3256 +3257 @@ -18195,12 +18210,12 @@ 1 2 -18059 +18062 2 3 -2236 +2237 3 @@ -18226,12 +18241,12 @@ 1 2 -18059 +18062 2 3 -2236 +2237 3 @@ -18251,15 +18266,15 @@ using_container -458008 +458092 parent -11228 +11230 child -291384 +291437 @@ -18273,12 +18288,12 @@ 1 2 -3212 +3213 2 4 -942 +943 4 @@ -18303,7 +18318,7 @@ 178 179 -1260 +1261 179 @@ -18329,17 +18344,17 @@ 1 2 -215813 +215852 2 3 -50362 +50371 3 11 -23136 +23140 13 @@ -18372,6 +18387,10 @@ location 16721 + +enclosing +1724 + @@ -18423,6 +18442,22 @@ +id +enclosing + + +12 + + +1 +2 +130659 + + + + + + condition id @@ -18471,6 +18506,22 @@ +condition +enclosing + + +12 + + +1 +2 +130659 + + + + + + message id @@ -18574,6 +18625,42 @@ +message +enclosing + + +12 + + +1 +2 +23513 + + +2 +3 +182 + + +3 +4 +2654 + + +4 +11 +1301 + + +12 +21 +2055 + + + + + + location id @@ -18716,19 +18803,209 @@ + +location +enclosing + + +12 + + +1 +2 +3441 + + +2 +3 +6194 + + +3 +4 +1125 + + +4 +5 +3715 + + +5 +6 +188 + + +13 +14 +2036 + + +16 +21 +19 + + + + + + +enclosing +id + + +12 + + +1 +2 +1171 + + +2 +3 +130 + + +3 +7 +136 + + +9 +108 +136 + + +170 +347 +130 + + +348 +10697 +19 + + + + + + +enclosing +condition + + +12 + + +1 +2 +1171 + + +2 +3 +130 + + +3 +7 +136 + + +9 +108 +136 + + +170 +347 +130 + + +348 +10697 +19 + + + + + + +enclosing +message + + +12 + + +1 +2 +1327 + + +2 +5 +136 + + +5 +180 +130 + + +211 +2870 +130 + + + + + + +enclosing +location + + +12 + + +1 +2 +1314 + + +2 +5 +149 + + +5 +180 +130 + + +211 +1886 +130 + + + + + params -4644085 +4644936 id -4627024 +4627872 function -3043304 +3043862 index @@ -18736,7 +19013,7 @@ type_id -1856463 +1856803 @@ -18750,7 +19027,7 @@ 1 2 -4626355 +4627203 2 @@ -18771,7 +19048,7 @@ 1 2 -4627024 +4627872 @@ -18787,12 +19064,12 @@ 1 2 -4611980 +4612825 2 4 -15043 +15046 @@ -18808,22 +19085,22 @@ 1 2 -2166224 +2166621 2 3 -475026 +475113 3 4 -244409 +244454 4 65 -157643 +157672 @@ -18839,22 +19116,22 @@ 1 2 -2166224 +2166621 2 3 -475026 +475113 3 4 -244409 +244454 4 65 -157643 +157672 @@ -18870,22 +19147,22 @@ 1 2 -2282782 +2283201 2 3 -470881 +470967 3 5 -254278 +254325 5 20 -35362 +35368 @@ -19024,22 +19301,22 @@ 1 2 -1504453 +1504729 2 3 -186679 +186713 3 14 -139463 +139489 14 5175 -25866 +25871 @@ -19055,22 +19332,22 @@ 1 2 -1524311 +1524590 2 3 -179815 +179848 3 23 -139694 +139719 23 4690 -12642 +12644 @@ -19086,12 +19363,12 @@ 1 2 -1744795 +1745115 2 65 -111667 +111688 @@ -19189,19 +19466,19 @@ membervariables -310243 +310300 id -305627 +305683 type_id -132895 +132920 name -53213 +53222 @@ -19215,12 +19492,12 @@ 1 2 -301164 +301220 2 7 -4462 +4463 @@ -19236,7 +19513,7 @@ 1 2 -305627 +305683 @@ -19252,22 +19529,22 @@ 1 2 -108049 +108068 2 3 -12269 +12272 3 9 -10054 +10056 9 1712 -2521 +2522 @@ -19283,17 +19560,17 @@ 1 2 -115099 +115120 2 3 -9089 +9091 3 266 -8706 +8707 @@ -19309,17 +19586,17 @@ 1 2 -28092 +28097 2 3 -8168 +8170 3 4 -5372 +5373 4 @@ -19329,12 +19606,12 @@ 6 15 -4089 +4090 15 1967 -3475 +3476 @@ -19350,12 +19627,12 @@ 1 2 -34287 +34293 2 3 -6853 +6854 3 @@ -19365,7 +19642,7 @@ 4 7 -4298 +4299 7 @@ -21629,15 +21906,15 @@ derivedtypes -4630204 +4463015 id -4630204 +4463015 name -2324208 +2202834 kind @@ -21645,7 +21922,7 @@ type_id -2775550 +2610500 @@ -21659,7 +21936,7 @@ 1 2 -4630204 +4463015 @@ -21675,7 +21952,7 @@ 1 2 -4630204 +4463015 @@ -21691,7 +21968,7 @@ 1 2 -4630204 +4463015 @@ -21707,17 +21984,17 @@ 1 2 -1682503 +1593463 2 3 -523359 +493877 3 45177 -118345 +115493 @@ -21733,7 +22010,7 @@ 1 2 -2324175 +2202801 2 @@ -21754,17 +22031,17 @@ 1 2 -1682744 +1593704 2 3 -523129 +493647 3 45159 -118334 +115482 @@ -21808,8 +22085,8 @@ 10 -112323 -112324 +97001 +97002 10 @@ -21859,8 +22136,8 @@ 10 -59447 -59448 +48341 +48342 10 @@ -21910,8 +22187,8 @@ 10 -111992 -111993 +96670 +96671 10 @@ -21933,22 +22210,22 @@ 1 2 -1704948 +1541019 2 3 -369630 +369478 3 4 -628985 +628070 4 202 -71985 +71932 @@ -21964,22 +22241,22 @@ 1 2 -1706165 +1542236 2 3 -369476 +369325 3 4 -627922 +627006 4 198 -71985 +71932 @@ -21995,22 +22272,22 @@ 1 2 -1706483 +1542554 2 3 -370759 +370608 3 4 -627878 +626962 4 7 -70428 +70375 @@ -22020,11 +22297,11 @@ pointerishsize -3375193 +3375811 id -3375193 +3375811 size @@ -22046,7 +22323,7 @@ 1 2 -3375193 +3375811 @@ -22062,7 +22339,7 @@ 1 2 -3375193 +3375811 @@ -22141,11 +22418,11 @@ arraysizes -17193 +17196 id -17193 +17196 num_elements @@ -22153,7 +22430,7 @@ bytesize -2510 +2511 alignment @@ -22171,7 +22448,7 @@ 1 2 -17193 +17196 @@ -22187,7 +22464,7 @@ 1 2 -17193 +17196 @@ -22203,7 +22480,7 @@ 1 2 -17193 +17196 @@ -22224,7 +22501,7 @@ 2 3 -1271 +1272 3 @@ -22265,7 +22542,7 @@ 1 2 -1589 +1590 2 @@ -22301,7 +22578,7 @@ 1 2 -1589 +1590 2 @@ -22388,7 +22665,7 @@ 1 2 -1907 +1908 2 @@ -22419,7 +22696,7 @@ 1 2 -1951 +1952 2 @@ -22577,15 +22854,15 @@ typedefbase -1819324 +1819658 id -1819324 +1819658 type_id -847211 +847366 @@ -22599,7 +22876,7 @@ 1 2 -1819324 +1819658 @@ -22615,22 +22892,22 @@ 1 2 -656518 +656639 2 3 -87895 +87911 3 6 -69583 +69596 6 5503 -33213 +33219 @@ -22640,19 +22917,19 @@ decltypes -46996 +47004 id -46996 +47004 expr -43432 +43440 base_type -8629 +8631 parentheses_would_change_meaning @@ -22670,7 +22947,7 @@ 1 2 -46996 +47004 @@ -22686,7 +22963,7 @@ 1 2 -46996 +47004 @@ -22702,7 +22979,7 @@ 1 2 -46996 +47004 @@ -22718,12 +22995,12 @@ 1 2 -40153 +40161 2 4 -3278 +3279 @@ -22739,12 +23016,12 @@ 1 2 -40153 +40161 2 4 -3278 +3279 @@ -22760,7 +23037,7 @@ 1 2 -43432 +43440 @@ -22776,12 +23053,12 @@ 1 2 -5822 +5823 2 3 -2521 +2522 3 @@ -22802,12 +23079,12 @@ 1 2 -2313 +2314 2 3 -5701 +5702 3 @@ -22828,7 +23105,7 @@ 1 2 -8629 +8631 @@ -22901,15 +23178,15 @@ usertypes -4193084 +4193852 id -4193084 +4193852 name -879229 +879390 kind @@ -22927,7 +23204,7 @@ 1 2 -4193084 +4193852 @@ -22943,7 +23220,7 @@ 1 2 -4193084 +4193852 @@ -22959,22 +23236,22 @@ 1 2 -577351 +577457 2 3 -194760 +194796 3 7 -69298 +69311 7 32744 -37818 +37825 @@ -22990,12 +23267,12 @@ 1 2 -826596 +826748 2 10 -52632 +52641 @@ -23132,11 +23409,11 @@ usertypesize -1386327 +1386581 id -1386327 +1386581 size @@ -23158,7 +23435,7 @@ 1 2 -1386327 +1386581 @@ -23174,7 +23451,7 @@ 1 2 -1386327 +1386581 @@ -23427,15 +23704,15 @@ mangled_name -4189805 +4190573 id -4189805 +4190573 mangled_name -483589 +483678 @@ -23449,7 +23726,7 @@ 1 2 -4189805 +4190573 @@ -23465,32 +23742,32 @@ 1 2 -292031 +292084 2 3 -62281 +62292 3 4 -33333 +33339 4 7 -36963 +36969 7 24 -37061 +37068 24 8580 -21919 +21923 @@ -23500,59 +23777,59 @@ is_pod_class -589105 +589213 id -589105 +589213 is_standard_layout_class -1158979 +1159191 id -1158979 +1159191 is_complete -1364825 +1365075 id -1364825 +1365075 is_class_template -225308 +225350 id -225308 +225350 class_instantiation -1157586 +1157798 to -1156018 +1156230 from -68015 +68028 @@ -23566,7 +23843,7 @@ 1 2 -1154538 +1154749 2 @@ -23587,47 +23864,47 @@ 1 2 -19956 +19959 2 3 -11995 +11997 3 4 -6853 +6854 4 5 -4616 +4617 5 7 -5636 +5637 7 11 -6052 +6053 11 20 -5197 +5198 20 84 -5109 +5110 84 4845 -2598 +2599 @@ -23637,11 +23914,11 @@ class_template_argument -3035464 +3036020 type_id -1392566 +1392821 index @@ -23649,7 +23926,7 @@ arg_type -860752 +860910 @@ -23663,27 +23940,27 @@ 1 2 -567011 +567115 2 3 -433655 +433734 3 4 -244936 +244981 4 7 -122786 +122808 7 113 -24177 +24182 @@ -23699,22 +23976,22 @@ 1 2 -593239 +593348 2 3 -445881 +445962 3 4 -258390 +258437 4 113 -95055 +95073 @@ -23822,27 +24099,27 @@ 1 2 -522186 +522282 2 3 -187402 +187437 3 4 -56700 +56710 4 11 -67379 +67392 11 11852 -27083 +27088 @@ -23858,17 +24135,17 @@ 1 2 -746322 +746458 2 3 -95527 +95544 3 22 -18903 +18907 @@ -23878,11 +24155,11 @@ class_template_argument_value -345737 +345800 type_id -223806 +223847 index @@ -23890,7 +24167,7 @@ arg_value -328182 +328242 @@ -23904,17 +24181,17 @@ 1 2 -201449 +201486 2 3 -13706 +13708 3 14 -8651 +8652 @@ -23930,17 +24207,17 @@ 1 2 -189826 +189860 2 3 -16919 +16922 3 37 -16787 +16790 44 @@ -24083,12 +24360,12 @@ 1 2 -310945 +311002 2 4 -17236 +17240 @@ -24104,7 +24381,7 @@ 1 2 -328182 +328242 @@ -24114,15 +24391,15 @@ is_proxy_class_for -46371 +46379 id -46371 +46379 templ_param_id -46371 +46379 @@ -24136,7 +24413,7 @@ 1 2 -46371 +46379 @@ -24152,7 +24429,7 @@ 1 2 -46371 +46379 @@ -24468,26 +24745,26 @@ is_function_template -983582 +983763 id -983582 +983763 function_instantiation -708185 +708315 to -708185 +708315 from -129310 +129334 @@ -24501,7 +24778,7 @@ 1 2 -708185 +708315 @@ -24517,37 +24794,37 @@ 1 2 -60998 +61009 2 3 -30833 +30839 3 4 -7346 +7347 4 5 -8815 +8817 5 10 -10000 +10001 10 71 -9704 +9705 71 653 -1611 +1612 @@ -24557,11 +24834,11 @@ function_template_argument -1910191 +1910541 function_id -1054175 +1054368 index @@ -24569,7 +24846,7 @@ arg_type -338391 +338453 @@ -24583,22 +24860,22 @@ 1 2 -583480 +583587 2 3 -290956 +291009 3 4 -127742 +127765 4 21 -51996 +52005 @@ -24614,22 +24891,22 @@ 1 2 -597899 +598009 2 3 -288642 +288695 3 4 -110922 +110942 4 21 -56711 +56721 @@ -24867,27 +25144,27 @@ 1 2 -226087 +226128 2 3 -45110 +45118 3 6 -27664 +27669 6 19 -25603 +25607 19 2030 -13925 +13928 @@ -24903,12 +25180,12 @@ 1 2 -314772 +314830 2 12 -23618 +23622 @@ -24918,11 +25195,11 @@ function_template_argument_value -198028 +198064 function_id -107062 +107081 index @@ -24930,7 +25207,7 @@ arg_value -170571 +170602 @@ -24944,12 +25221,12 @@ 1 2 -101546 +101565 2 14 -5515 +5516 @@ -24965,17 +25242,17 @@ 1 2 -84945 +84961 2 3 -16173 +16176 3 113 -5943 +5944 @@ -25103,12 +25380,12 @@ 1 2 -143619 +143645 2 3 -26447 +26452 3 @@ -25129,7 +25406,7 @@ 1 2 -170571 +170602 @@ -25139,26 +25416,26 @@ is_variable_template -17807 +17810 id -17807 +17810 variable_instantiation -35800 +35807 to -35800 +35807 from -6469 +6470 @@ -25172,7 +25449,7 @@ 1 2 -35800 +35807 @@ -25188,12 +25465,12 @@ 1 2 -2236 +2237 2 3 -1907 +1908 3 @@ -25580,15 +25857,15 @@ routinetypes -430398 +430477 id -430398 +430477 return_type -177534 +177566 @@ -25602,7 +25879,7 @@ 1 2 -430398 +430477 @@ -25618,17 +25895,17 @@ 1 2 -143082 +143108 2 3 -18125 +18128 3 9 -13322 +13324 9 @@ -25643,11 +25920,11 @@ routinetypeargs -719710 +719841 routine -351779 +351843 index @@ -25655,7 +25932,7 @@ type_id -205528 +205565 @@ -25669,27 +25946,27 @@ 1 2 -161898 +161927 2 3 -95932 +95950 3 4 -53925 +53935 4 6 -32324 +32330 6 33 -7697 +7698 @@ -25705,22 +25982,22 @@ 1 2 -186712 +186746 2 3 -96689 +96707 3 4 -47653 +47662 4 22 -20723 +20727 @@ -25878,27 +26155,27 @@ 1 2 -122391 +122413 2 3 -40833 +40841 3 4 -13212 +13215 4 7 -16633 +16636 7 1349 -12456 +12458 @@ -25914,17 +26191,17 @@ 1 2 -154080 +154108 2 3 -39430 +39437 3 33 -12017 +12019 @@ -25934,19 +26211,19 @@ ptrtomembers -12631 +12634 id -12631 +12634 type_id -9397 +9398 class_id -6359 +6360 @@ -25960,7 +26237,7 @@ 1 2 -12631 +12634 @@ -25976,7 +26253,7 @@ 1 2 -12631 +12634 @@ -25992,7 +26269,7 @@ 1 2 -9035 +9036 2 @@ -26013,7 +26290,7 @@ 1 2 -9035 +9036 2 @@ -26034,7 +26311,7 @@ 1 2 -5339 +5340 2 @@ -26060,7 +26337,7 @@ 1 2 -5339 +5340 2 @@ -26128,11 +26405,11 @@ typespecifiers -1500944 +1333183 type_id -1494058 +1326296 spec_id @@ -26150,12 +26427,12 @@ 1 2 -1487172 +1319408 2 3 -6886 +6887 @@ -26199,8 +26476,8 @@ 10 -111858 -111859 +96536 +96537 10 @@ -26211,11 +26488,11 @@ funspecifiers -11101038 +11122308 func_id -3417156 +3417782 spec_id @@ -26233,27 +26510,27 @@ 1 2 -342250 +342313 2 3 -436911 +421966 3 4 -842562 +853858 4 5 -1677020 +1680881 5 8 -118411 +118761 @@ -26327,8 +26604,8 @@ 10 -137685 -137686 +139439 +139440 10 @@ -27617,15 +27894,15 @@ typeattributes -19320 +19323 type_id -17938 +17942 spec_id -19320 +19323 @@ -27639,7 +27916,7 @@ 1 2 -17236 +17240 2 @@ -27660,7 +27937,7 @@ 1 2 -19320 +19323 @@ -27670,15 +27947,15 @@ funcattributes -304333 +304389 func_id -164211 +164242 spec_id -304333 +304389 @@ -27692,17 +27969,17 @@ 1 2 -89671 +89688 2 3 -12576 +12579 3 4 -59956 +59967 4 @@ -27723,7 +28000,7 @@ 1 2 -304333 +304389 @@ -27839,15 +28116,15 @@ unspecifiedtype -9281768 +9115432 type_id -9281768 +9115432 unspecified_type_id -5011819 +5012737 @@ -27861,7 +28138,7 @@ 1 2 -9281768 +9115432 @@ -27877,22 +28154,17 @@ 1 2 -2685220 +2736029 2 3 -1947648 +1962021 3 -42 -375957 - - -42 7950 -2993 +314687 @@ -27902,11 +28174,11 @@ member -4920776 +4921678 parent -814338 +814487 index @@ -27914,7 +28186,7 @@ child -4905217 +4906116 @@ -27928,47 +28200,47 @@ 1 2 -42313 +42321 2 3 -223740 +223781 3 4 -204585 +204622 4 5 -86908 +86924 5 7 -65888 +65900 7 9 -61601 +61612 9 15 -62040 +62051 15 47 -61173 +61184 47 245 -6085 +6086 @@ -27984,47 +28256,47 @@ 1 2 -41656 +41663 2 3 -223565 +223606 3 4 -199343 +199380 4 5 -89715 +89732 5 7 -66360 +66372 7 9 -61678 +61689 9 15 -62961 +62972 15 42 -61261 +61272 42 281 -7796 +7797 @@ -28182,7 +28454,7 @@ 1 2 -4905217 +4906116 @@ -28198,12 +28470,12 @@ 1 2 -4889866 +4890762 2 7 -15351 +15353 @@ -28213,15 +28485,15 @@ enclosingfunction -125055 +125078 child -125055 +125078 parent -71393 +71406 @@ -28235,7 +28507,7 @@ 1 2 -125055 +125078 @@ -28251,22 +28523,22 @@ 1 2 -38333 +38340 2 3 -21074 +21078 3 4 -6535 +6536 4 7 -5372 +5373 7 @@ -28281,15 +28553,15 @@ derivations -390189 +390261 derivation -390189 +390261 sub -364378 +364444 index @@ -28297,11 +28569,11 @@ super -235659 +235703 location -86963 +86979 @@ -28315,7 +28587,7 @@ 1 2 -390189 +390261 @@ -28331,7 +28603,7 @@ 1 2 -390189 +390261 @@ -28347,7 +28619,7 @@ 1 2 -390189 +390261 @@ -28363,7 +28635,7 @@ 1 2 -390189 +390261 @@ -28379,12 +28651,12 @@ 1 2 -341812 +341874 2 7 -22565 +22570 @@ -28400,12 +28672,12 @@ 1 2 -351428 +351492 2 7 -12949 +12952 @@ -28421,12 +28693,12 @@ 1 2 -341823 +341885 2 7 -22555 +22559 @@ -28442,12 +28714,12 @@ 1 2 -351417 +351481 2 7 -12960 +12963 @@ -28627,12 +28899,12 @@ 1 2 -220879 +220919 2 1142 -14780 +14783 @@ -28648,12 +28920,12 @@ 1 2 -220890 +220930 2 1142 -14769 +14772 @@ -28669,7 +28941,7 @@ 1 2 -235210 +235253 2 @@ -28690,12 +28962,12 @@ 1 2 -228302 +228344 2 439 -7357 +7358 @@ -28711,22 +28983,22 @@ 1 2 -66338 +66350 2 3 -8388 +8389 3 7 -6611 +6613 7 795 -5625 +5626 @@ -28742,22 +29014,22 @@ 1 2 -68575 +68587 2 3 -6370 +6371 3 8 -7039 +7040 8 795 -4978 +4979 @@ -28773,7 +29045,7 @@ 1 2 -86941 +86957 2 @@ -28794,22 +29066,22 @@ 1 2 -69276 +69289 2 3 -8201 +8203 3 9 -6524 +6525 9 795 -2960 +2961 @@ -28819,11 +29091,11 @@ derspecifiers -392569 +392641 der_id -390156 +390228 spec_id @@ -28841,7 +29113,7 @@ 1 2 -387744 +387815 2 @@ -28887,11 +29159,11 @@ direct_base_offsets -310496 +310552 der_id -310496 +310552 offset @@ -28909,7 +29181,7 @@ 1 2 -310496 +310552 @@ -28995,11 +29267,11 @@ virtual_base_offsets -6337 +6338 sub -3508 +3509 super @@ -29052,7 +29324,7 @@ 1 2 -2960 +2961 2 @@ -29286,23 +29558,23 @@ frienddecls -240298 +240342 id -240298 +240342 type_id -27280 +27285 decl_id -49035 +49044 location -7302 +7304 @@ -29316,7 +29588,7 @@ 1 2 -240298 +240342 @@ -29332,7 +29604,7 @@ 1 2 -240298 +240342 @@ -29348,7 +29620,7 @@ 1 2 -240298 +240342 @@ -29364,17 +29636,17 @@ 1 2 -6217 +6218 2 3 -10230 +10232 3 5 -1984 +1985 5 @@ -29384,7 +29656,7 @@ 6 8 -2313 +2314 8 @@ -29415,17 +29687,17 @@ 1 2 -6217 +6218 2 3 -10230 +10232 3 5 -1984 +1985 5 @@ -29435,7 +29707,7 @@ 6 8 -2313 +2314 8 @@ -29466,12 +29738,12 @@ 1 2 -25701 +25706 2 31 -1578 +1579 @@ -29487,7 +29759,7 @@ 1 2 -33684 +33690 2 @@ -29502,12 +29774,12 @@ 7 23 -3804 +3805 23 394 -2532 +2533 @@ -29523,7 +29795,7 @@ 1 2 -33684 +33690 2 @@ -29538,12 +29810,12 @@ 7 23 -3804 +3805 23 394 -2532 +2533 @@ -29559,7 +29831,7 @@ 1 2 -48498 +48507 2 @@ -29580,12 +29852,12 @@ 1 2 -6239 +6240 2 3 -942 +943 3 @@ -29606,7 +29878,7 @@ 1 2 -6864 +6865 2 @@ -29627,7 +29899,7 @@ 1 2 -6250 +6251 2 @@ -29647,19 +29919,19 @@ comments -1580013 +1580303 id -1580013 +1580303 contents -784019 +784163 location -1580013 +1580303 @@ -29673,7 +29945,7 @@ 1 2 -1580013 +1580303 @@ -29689,7 +29961,7 @@ 1 2 -1580013 +1580303 @@ -29705,17 +29977,17 @@ 1 2 -663821 +663943 2 3 -75088 +75102 3 10738 -45110 +45118 @@ -29731,17 +30003,17 @@ 1 2 -663821 +663943 2 3 -75088 +75102 3 10738 -45110 +45118 @@ -29757,7 +30029,7 @@ 1 2 -1580013 +1580303 @@ -29773,7 +30045,7 @@ 1 2 -1580013 +1580303 @@ -29783,15 +30055,15 @@ commentbinding -713207 +713294 id -618261 +618419 element -684435 +684517 @@ -29805,17 +30077,17 @@ 1 2 -556868 +557080 2 3 -49079 +49044 3 97 -12313 +12294 @@ -29831,12 +30103,12 @@ 1 2 -655663 +655739 2 3 -28772 +28777 @@ -29899,22 +30171,22 @@ compgenerated -6707974 +6707689 id -6707974 +6707689 synthetic_destructor_call -59605 +59594 element -46392 +46379 i @@ -29922,7 +30194,7 @@ destructor_call -49463 +49450 @@ -29936,12 +30208,12 @@ 1 2 -36952 +36936 2 3 -6765 +6766 3 @@ -29962,12 +30234,12 @@ 1 2 -36952 +36936 2 3 -6765 +6766 3 @@ -30006,8 +30278,8 @@ 21 -4231 -4232 +4229 +4230 10 @@ -30042,8 +30314,8 @@ 21 -3565 -3566 +3563 +3564 10 @@ -30060,17 +30332,17 @@ 1 2 -43618 +43604 2 3 -3618 +3619 3 26 -2225 +2226 @@ -30086,7 +30358,7 @@ 1 2 -49463 +49450 @@ -30096,15 +30368,15 @@ namespaces -7686 +7687 id -7686 +7687 name -4133 +4134 @@ -30118,7 +30390,7 @@ 1 2 -7686 +7687 @@ -30134,7 +30406,7 @@ 1 2 -3475 +3476 2 @@ -30165,15 +30437,15 @@ namespacembrs -1603040 +1603333 parentid -7160 +7161 memberid -1603040 +1603333 @@ -30247,7 +30519,7 @@ 778 39485 -317 +318 @@ -30263,7 +30535,7 @@ 1 2 -1603040 +1603333 @@ -30536,8 +30808,8 @@ 1 -13857 -13858 +13714 +13715 1 @@ -30551,8 +30823,8 @@ 1 -4155321 -4155322 +4155464 +4155465 1 @@ -30563,11 +30835,11 @@ iscall -2320337 +2320159 caller -2320337 +2320159 kind @@ -30585,7 +30857,7 @@ 1 2 -2320337 +2320159 @@ -30604,13 +30876,13 @@ 10 -6429 -6430 +6428 +6429 10 -203798 -203799 +203744 +203745 10 @@ -30621,11 +30893,11 @@ numtemplatearguments -164694 +164713 expr_id -164694 +164713 num @@ -30643,7 +30915,7 @@ 1 2 -164694 +164713 @@ -30672,8 +30944,8 @@ 10 -14307 -14308 +14306 +14307 10 @@ -31219,11 +31491,11 @@ expr_allocator -30329 +30334 expr -30329 +30334 func @@ -31245,7 +31517,7 @@ 1 2 -30329 +30334 @@ -31261,7 +31533,7 @@ 1 2 -30329 +30334 @@ -31370,11 +31642,11 @@ expr_deallocator -33300 +33306 expr -33300 +33306 func @@ -31396,7 +31668,7 @@ 1 2 -33300 +33306 @@ -31412,7 +31684,7 @@ 1 2 -33300 +33306 @@ -32598,15 +32870,15 @@ expr_ancestor -66086 +66076 exp -65384 +65374 ancestor -47105 +47092 @@ -32620,12 +32892,12 @@ 1 2 -64748 +64738 2 4 -635 +636 @@ -32641,12 +32913,12 @@ 1 2 -34945 +34929 2 3 -9704 +9705 3 @@ -32927,15 +33199,15 @@ expr_types -18573218 +18573265 id -18430421 +18430420 typeid -1322281 +1322490 value_category @@ -32953,12 +33225,12 @@ 1 2 -18289082 +18289033 2 4 -141338 +141386 @@ -32974,7 +33246,7 @@ 1 2 -18430421 +18430420 @@ -32990,42 +33262,42 @@ 1 2 -513809 +513771 2 3 -251899 +252054 3 4 -108356 +108419 4 5 -86097 +86069 5 8 -114156 +114199 8 14 -106009 +106094 14 45 -99715 +99701 45 -126320 -42237 +126299 +42179 @@ -33041,17 +33313,17 @@ 1 2 -1170755 +1170937 2 3 -143126 +143152 3 4 -8399 +8400 @@ -33070,13 +33342,13 @@ 10 -370542 -370543 +370443 +370444 10 -1304851 -1304852 +1304642 +1304643 10 @@ -33101,8 +33373,8 @@ 10 -102767 -102768 +102764 +102765 10 @@ -33113,15 +33385,15 @@ new_allocated_type -32127 +32133 expr -32127 +32133 type_id -16513 +16516 @@ -33135,7 +33407,7 @@ 1 2 -32127 +32133 @@ -33151,7 +33423,7 @@ 1 2 -10340 +10341 2 @@ -33776,15 +34048,15 @@ condition_decl_bind -7028 +7007 expr -7028 +7007 decl -7028 +7007 @@ -33798,7 +34070,7 @@ 1 2 -7028 +7007 @@ -33814,7 +34086,7 @@ 1 2 -7028 +7007 @@ -33824,11 +34096,11 @@ typeid_bind -4418 +4419 expr -4418 +4419 type_id @@ -33846,7 +34118,7 @@ 1 2 -4418 +4419 @@ -35541,11 +35813,11 @@ stmts -4688625 +4688881 id -4688625 +4688881 kind @@ -35553,7 +35825,7 @@ location -1193858 +1194077 @@ -35567,7 +35839,7 @@ 1 2 -4688625 +4688881 @@ -35583,7 +35855,7 @@ 1 2 -4688625 +4688881 @@ -35617,8 +35889,8 @@ 10 -736 -737 +735 +736 10 @@ -35632,13 +35904,13 @@ 10 -2237 -2238 +2235 +2236 10 -2267 -2268 +2266 +2267 10 @@ -35647,13 +35919,13 @@ 10 -2827 -2828 +2826 +2827 10 -3121 -3122 +3119 +3120 10 @@ -35662,33 +35934,33 @@ 10 -4775 -4776 +4772 +4773 10 -30484 -30485 +30477 +30478 10 -55911 -55912 +55902 +55903 10 -90778 -90779 +90766 +90767 10 -103056 -103057 +103053 +103054 10 -120839 -120840 +120825 +120826 10 @@ -35811,32 +36083,32 @@ 1 2 -677440 +677991 2 3 -181953 +181580 3 4 -107851 +107904 4 6 -102117 +102102 6 22 -101535 +101532 22 5041 -22960 +22964 @@ -35852,12 +36124,12 @@ 1 2 -1170273 +1170487 2 9 -23585 +23590 @@ -36155,15 +36427,15 @@ while_body -30998 +30992 while_stmt -30998 +30992 body_id -30998 +30992 @@ -36177,7 +36449,7 @@ 1 2 -30998 +30992 @@ -36193,7 +36465,7 @@ 1 2 -30998 +30992 @@ -37490,15 +37762,15 @@ blockscope -1324978 +1325067 block -1324978 +1325067 enclosing -1186775 +1186916 @@ -37512,7 +37784,7 @@ 1 2 -1324978 +1325067 @@ -37528,12 +37800,12 @@ 1 2 -1106391 +1106571 2 509 -80384 +80344 @@ -37729,11 +38001,11 @@ preprocdirects -1323355 +1323598 id -1323355 +1323598 kind @@ -37741,7 +38013,7 @@ location -1317039 +1317281 @@ -37755,7 +38027,7 @@ 1 2 -1323355 +1323598 @@ -37771,7 +38043,7 @@ 1 2 -1323355 +1323598 @@ -37939,12 +38211,12 @@ 1 2 -1316710 +1316952 2 235 -328 +329 @@ -37960,7 +38232,7 @@ 1 2 -1317039 +1317281 @@ -37970,15 +38242,15 @@ preprocpair -378731 +378800 begin -300452 +300507 elseelifend -378731 +378800 @@ -37992,17 +38264,17 @@ 1 2 -238576 +238620 2 3 -54539 +54549 3 53 -7335 +7336 @@ -38018,7 +38290,7 @@ 1 2 -378731 +378800 @@ -38028,41 +38300,41 @@ preproctrue -166536 +166567 branch -166536 +166567 preprocfalse -119101 +119123 branch -119101 +119123 preproctext -965238 +965415 id -965238 +965415 head -463479 +463564 body -175549 +175581 @@ -38076,7 +38348,7 @@ 1 2 -965238 +965415 @@ -38092,7 +38364,7 @@ 1 2 -965238 +965415 @@ -38108,22 +38380,22 @@ 1 2 -345902 +345965 2 3 -78158 +78172 3 19 -34770 +34776 19 752 -4649 +4650 @@ -38139,12 +38411,12 @@ 1 2 -441802 +441882 2 38 -21677 +21681 @@ -38160,12 +38432,12 @@ 1 2 -164979 +165009 2 64816 -10570 +10572 @@ -38181,12 +38453,12 @@ 1 2 -166459 +166490 2 21810 -9089 +9091 @@ -38196,15 +38468,15 @@ includes -290791 +290845 id -290791 +290845 included -54594 +54604 @@ -38218,7 +38490,7 @@ 1 2 -290791 +290845 @@ -38234,37 +38506,37 @@ 1 2 -26886 +26891 2 3 -8958 +8960 3 4 -4616 +4617 4 6 -4846 +4847 6 11 -4188 +4189 11 41 -4111 +4112 41 763 -986 +987 @@ -38322,11 +38594,11 @@ link_parent -18149980 +18153305 element -4991698 +4992613 link_target @@ -38344,32 +38616,32 @@ 1 2 -1493159 +1493433 2 3 -1882856 +1883201 3 4 -718712 +718843 4 6 -400792 +400866 6 29 -398073 +398146 29 45 -98103 +98121 diff --git a/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/old.dbscheme b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/old.dbscheme new file mode 100644 index 00000000000..025827d85c3 --- /dev/null +++ b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/old.dbscheme @@ -0,0 +1,2109 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files( + unique int id: @file, + string name: string ref, + string simple: string ref, + string ext: string ref, + int fromSource: int ref +); + +folders( + unique int id: @folder, + string name: string ref, + string simple: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +decltypes( + unique int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; +successors( + int from: @cfgnode ref, + int to: @cfgnode ref +); + +truecond( + unique int from: @cfgnode ref, + int to: @cfgnode ref +); + +falsecond( + unique int from: @cfgnode ref, + int to: @cfgnode ref +); + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/semmlecode.cpp.dbscheme b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..098850d25c4 --- /dev/null +++ b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/semmlecode.cpp.dbscheme @@ -0,0 +1,2110 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files( + unique int id: @file, + string name: string ref, + string simple: string ref, + string ext: string ref, + int fromSource: int ref +); + +folders( + unique int id: @folder, + string name: string ref, + string simple: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +decltypes( + unique int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; +successors( + int from: @cfgnode ref, + int to: @cfgnode ref +); + +truecond( + unique int from: @cfgnode ref, + int to: @cfgnode ref +); + +falsecond( + unique int from: @cfgnode ref, + int to: @cfgnode ref +); + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/static_asserts.ql b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/static_asserts.ql new file mode 100644 index 00000000000..e5ec84fd76e --- /dev/null +++ b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/static_asserts.ql @@ -0,0 +1,21 @@ +class StaticAssert extends @static_assert { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +class NameSpace extends @namespace { + string toString() { none() } +} + +from StaticAssert sa, Expr condition, string message, Location loc, NameSpace ns +where + static_asserts(sa, condition, message, loc) and + namespaces(ns, "") +select sa, condition, message, loc, ns diff --git a/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/upgrade.properties b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/upgrade.properties new file mode 100644 index 00000000000..ca1074f5a4d --- /dev/null +++ b/cpp/upgrades/025827d85c3f44a7fd52d4fad636e9a4141f12dd/upgrade.properties @@ -0,0 +1,4 @@ +description: Give static_assert's an enclosing element +compatibility: partial +static_asserts.rel: run static_asserts.qlo +