aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-02-08 00:37:45 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-02-08 00:37:45 +0000
commit2bb07c1dfeda50d7edcee512932b86a1a65c6e69 (patch)
treedbe3bfc7737c2f75676461415704be2a6a1734d8
parentada7191795dde85a620008094fbe5464abdb916b (diff)
Fix stack overflow and improve performance when a module contains many
overloads of a name by claiming that there are no lookup results for that name in modules while loading the names from the module. Lookups in deserialization really don't want to find names which they themselves are in the process of introducing. This also has the pleasant side-effect of automatically caching PCH lookups which found no names. The runtime here is still quadratic in the number of overloads, but the constant is lower. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174685 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/DeclBase.cpp12
-rw-r--r--test/Modules/Inputs/cxx-many-overloads.h2004
-rw-r--r--test/Modules/Inputs/module.map4
-rw-r--r--test/Modules/cxx-many-overloads.cpp9
4 files changed, 2024 insertions, 5 deletions
diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp
index 3039c95462..e1202c23a8 100644
--- a/lib/AST/DeclBase.cpp
+++ b/lib/AST/DeclBase.cpp
@@ -1203,14 +1203,16 @@ DeclContext::lookup(DeclarationName Name) {
if (LookupPtr.getInt())
Map = buildLookup();
+ if (!Map)
+ Map = CreateStoredDeclsMap(getParentASTContext());
+
// If a PCH/module has a result for this name, and we have a local
// declaration, we will have imported the PCH/module result when adding the
// local declaration or when reconciling the module.
- if (Map) {
- StoredDeclsMap::iterator I = Map->find(Name);
- if (I != Map->end())
- return I->second.getLookupResult();
- }
+ std::pair<StoredDeclsMap::iterator, bool> R =
+ Map->insert(std::make_pair(Name, StoredDeclsList()));
+ if (!R.second)
+ return R.first->second.getLookupResult();
ExternalASTSource *Source = getParentASTContext().getExternalSource();
if (Source->FindExternalVisibleDeclsByName(this, Name)) {
diff --git a/test/Modules/Inputs/cxx-many-overloads.h b/test/Modules/Inputs/cxx-many-overloads.h
new file mode 100644
index 0000000000..890a86cbbd
--- /dev/null
+++ b/test/Modules/Inputs/cxx-many-overloads.h
@@ -0,0 +1,2004 @@
+namespace N {
+ template<int> struct X {};
+ void f(X<0>);
+ void f(X<1>);
+ void f(X<2>);
+ void f(X<3>);
+ void f(X<4>);
+ void f(X<5>);
+ void f(X<6>);
+ void f(X<7>);
+ void f(X<8>);
+ void f(X<9>);
+ void f(X<10>);
+ void f(X<11>);
+ void f(X<12>);
+ void f(X<13>);
+ void f(X<14>);
+ void f(X<15>);
+ void f(X<16>);
+ void f(X<17>);
+ void f(X<18>);
+ void f(X<19>);
+ void f(X<20>);
+ void f(X<21>);
+ void f(X<22>);
+ void f(X<23>);
+ void f(X<24>);
+ void f(X<25>);
+ void f(X<26>);
+ void f(X<27>);
+ void f(X<28>);
+ void f(X<29>);
+ void f(X<30>);
+ void f(X<31>);
+ void f(X<32>);
+ void f(X<33>);
+ void f(X<34>);
+ void f(X<35>);
+ void f(X<36>);
+ void f(X<37>);
+ void f(X<38>);
+ void f(X<39>);
+ void f(X<40>);
+ void f(X<41>);
+ void f(X<42>);
+ void f(X<43>);
+ void f(X<44>);
+ void f(X<45>);
+ void f(X<46>);
+ void f(X<47>);
+ void f(X<48>);
+ void f(X<49>);
+ void f(X<50>);
+ void f(X<51>);
+ void f(X<52>);
+ void f(X<53>);
+ void f(X<54>);
+ void f(X<55>);
+ void f(X<56>);
+ void f(X<57>);
+ void f(X<58>);
+ void f(X<59>);
+ void f(X<60>);
+ void f(X<61>);
+ void f(X<62>);
+ void f(X<63>);
+ void f(X<64>);
+ void f(X<65>);
+ void f(X<66>);
+ void f(X<67>);
+ void f(X<68>);
+ void f(X<69>);
+ void f(X<70>);
+ void f(X<71>);
+ void f(X<72>);
+ void f(X<73>);
+ void f(X<74>);
+ void f(X<75>);
+ void f(X<76>);
+ void f(X<77>);
+ void f(X<78>);
+ void f(X<79>);
+ void f(X<80>);
+ void f(X<81>);
+ void f(X<82>);
+ void f(X<83>);
+ void f(X<84>);
+ void f(X<85>);
+ void f(X<86>);
+ void f(X<87>);
+ void f(X<88>);
+ void f(X<89>);
+ void f(X<90>);
+ void f(X<91>);
+ void f(X<92>);
+ void f(X<93>);
+ void f(X<94>);
+ void f(X<95>);
+ void f(X<96>);
+ void f(X<97>);
+ void f(X<98>);
+ void f(X<99>);
+ void f(X<100>);
+ void f(X<101>);
+ void f(X<102>);
+ void f(X<103>);
+ void f(X<104>);
+ void f(X<105>);
+ void f(X<106>);
+ void f(X<107>);
+ void f(X<108>);
+ void f(X<109>);
+ void f(X<110>);
+ void f(X<111>);
+ void f(X<112>);
+ void f(X<113>);
+ void f(X<114>);
+ void f(X<115>);
+ void f(X<116>);
+ void f(X<117>);
+ void f(X<118>);
+ void f(X<119>);
+ void f(X<120>);
+ void f(X<121>);
+ void f(X<122>);
+ void f(X<123>);
+ void f(X<124>);
+ void f(X<125>);
+ void f(X<126>);
+ void f(X<127>);
+ void f(X<128>);
+ void f(X<129>);
+ void f(X<130>);
+ void f(X<131>);
+ void f(X<132>);
+ void f(X<133>);
+ void f(X<134>);
+ void f(X<135>);
+ void f(X<136>);
+ void f(X<137>);
+ void f(X<138>);
+ void f(X<139>);
+ void f(X<140>);
+ void f(X<141>);
+ void f(X<142>);
+ void f(X<143>);
+ void f(X<144>);
+ void f(X<145>);
+ void f(X<146>);
+ void f(X<147>);
+ void f(X<148>);
+ void f(X<149>);
+ void f(X<150>);
+ void f(X<151>);
+ void f(X<152>);
+ void f(X<153>);
+ void f(X<154>);
+ void f(X<155>);
+ void f(X<156>);
+ void f(X<157>);
+ void f(X<158>);
+ void f(X<159>);
+ void f(X<160>);
+ void f(X<161>);
+ void f(X<162>);
+ void f(X<163>);
+ void f(X<164>);
+ void f(X<165>);
+ void f(X<166>);
+ void f(X<167>);
+ void f(X<168>);
+ void f(X<169>);
+ void f(X<170>);
+ void f(X<171>);
+ void f(X<172>);
+ void f(X<173>);
+ void f(X<174>);
+ void f(X<175>);
+ void f(X<176>);
+ void f(X<177>);
+ void f(X<178>);
+ void f(X<179>);
+ void f(X<180>);
+ void f(X<181>);
+ void f(X<182>);
+ void f(X<183>);
+ void f(X<184>);
+ void f(X<185>);
+ void f(X<186>);
+ void f(X<187>);
+ void f(X<188>);
+ void f(X<189>);
+ void f(X<190>);
+ void f(X<191>);
+ void f(X<192>);
+ void f(X<193>);
+ void f(X<194>);
+ void f(X<195>);
+ void f(X<196>);
+ void f(X<197>);
+ void f(X<198>);
+ void f(X<199>);
+ void f(X<200>);
+ void f(X<201>);
+ void f(X<202>);
+ void f(X<203>);
+ void f(X<204>);
+ void f(X<205>);
+ void f(X<206>);
+ void f(X<207>);
+ void f(X<208>);
+ void f(X<209>);
+ void f(X<210>);
+ void f(X<211>);
+ void f(X<212>);
+ void f(X<213>);
+ void f(X<214>);
+ void f(X<215>);
+ void f(X<216>);
+ void f(X<217>);
+ void f(X<218>);
+ void f(X<219>);
+ void f(X<220>);
+ void f(X<221>);
+ void f(X<222>);
+ void f(X<223>);
+ void f(X<224>);
+ void f(X<225>);
+ void f(X<226>);
+ void f(X<227>);
+ void f(X<228>);
+ void f(X<229>);
+ void f(X<230>);
+ void f(X<231>);
+ void f(X<232>);
+ void f(X<233>);
+ void f(X<234>);
+ void f(X<235>);
+ void f(X<236>);
+ void f(X<237>);
+ void f(X<238>);
+ void f(X<239>);
+ void f(X<240>);
+ void f(X<241>);
+ void f(X<242>);
+ void f(X<243>);
+ void f(X<244>);
+ void f(X<245>);
+ void f(X<246>);
+ void f(X<247>);
+ void f(X<248>);
+ void f(X<249>);
+ void f(X<250>);
+ void f(X<251>);
+ void f(X<252>);
+ void f(X<253>);
+ void f(X<254>);
+ void f(X<255>);
+ void f(X<256>);
+ void f(X<257>);
+ void f(X<258>);
+ void f(X<259>);
+ void f(X<260>);
+ void f(X<261>);
+ void f(X<262>);
+ void f(X<263>);
+ void f(X<264>);
+ void f(X<265>);
+ void f(X<266>);
+ void f(X<267>);
+ void f(X<268>);
+ void f(X<269>);
+ void f(X<270>);
+ void f(X<271>);
+ void f(X<272>);
+ void f(X<273>);
+ void f(X<274>);
+ void f(X<275>);
+ void f(X<276>);
+ void f(X<277>);
+ void f(X<278>);
+ void f(X<279>);
+ void f(X<280>);
+ void f(X<281>);
+ void f(X<282>);
+ void f(X<283>);
+ void f(X<284>);
+ void f(X<285>);
+ void f(X<286>);
+ void f(X<287>);
+ void f(X<288>);
+ void f(X<289>);
+ void f(X<290>);
+ void f(X<291>);
+ void f(X<292>);
+ void f(X<293>);
+ void f(X<294>);
+ void f(X<295>);
+ void f(X<296>);
+ void f(X<297>);
+ void f(X<298>);
+ void f(X<299>);
+ void f(X<300>);
+ void f(X<301>);
+ void f(X<302>);
+ void f(X<303>);
+ void f(X<304>);
+ void f(X<305>);
+ void f(X<306>);
+ void f(X<307>);
+ void f(X<308>);
+ void f(X<309>);
+ void f(X<310>);
+ void f(X<311>);
+ void f(X<312>);
+ void f(X<313>);
+ void f(X<314>);
+ void f(X<315>);
+ void f(X<316>);
+ void f(X<317>);
+ void f(X<318>);
+ void f(X<319>);
+ void f(X<320>);
+ void f(X<321>);
+ void f(X<322>);
+ void f(X<323>);
+ void f(X<324>);
+ void f(X<325>);
+ void f(X<326>);
+ void f(X<327>);
+ void f(X<328>);
+ void f(X<329>);
+ void f(X<330>);
+ void f(X<331>);
+ void f(X<332>);
+ void f(X<333>);
+ void f(X<334>);
+ void f(X<335>);
+ void f(X<336>);
+ void f(X<337>);
+ void f(X<338>);
+ void f(X<339>);
+ void f(X<340>);
+ void f(X<341>);
+ void f(X<342>);
+ void f(X<343>);
+ void f(X<344>);
+ void f(X<345>);
+ void f(X<346>);
+ void f(X<347>);
+ void f(X<348>);
+ void f(X<349>);
+ void f(X<350>);
+ void f(X<351>);
+ void f(X<352>);
+ void f(X<353>);
+ void f(X<354>);
+ void f(X<355>);
+ void f(X<356>);
+ void f(X<357>);
+ void f(X<358>);
+ void f(X<359>);
+ void f(X<360>);
+ void f(X<361>);
+ void f(X<362>);
+ void f(X<363>);
+ void f(X<364>);
+ void f(X<365>);
+ void f(X<366>);
+ void f(X<367>);
+ void f(X<368>);
+ void f(X<369>);
+ void f(X<370>);
+ void f(X<371>);
+ void f(X<372>);
+ void f(X<373>);
+ void f(X<374>);
+ void f(X<375>);
+ void f(X<376>);
+ void f(X<377>);
+ void f(X<378>);
+ void f(X<379>);
+ void f(X<380>);
+ void f(X<381>);
+ void f(X<382>);
+ void f(X<383>);
+ void f(X<384>);
+ void f(X<385>);
+ void f(X<386>);
+ void f(X<387>);
+ void f(X<388>);
+ void f(X<389>);
+ void f(X<390>);
+ void f(X<391>);
+ void f(X<392>);
+ void f(X<393>);
+ void f(X<394>);
+ void f(X<395>);
+ void f(X<396>);
+ void f(X<397>);
+ void f(X<398>);
+ void f(X<399>);
+ void f(X<400>);
+ void f(X<401>);
+ void f(X<402>);
+ void f(X<403>);
+ void f(X<404>);
+ void f(X<405>);
+ void f(X<406>);
+ void f(X<407>);
+ void f(X<408>);
+ void f(X<409>);
+ void f(X<410>);
+ void f(X<411>);
+ void f(X<412>);
+ void f(X<413>);
+ void f(X<414>);
+ void f(X<415>);
+ void f(X<416>);
+ void f(X<417>);
+ void f(X<418>);
+ void f(X<419>);
+ void f(X<420>);
+ void f(X<421>);
+ void f(X<422>);
+ void f(X<423>);
+ void f(X<424>);
+ void f(X<425>);
+ void f(X<426>);
+ void f(X<427>);
+ void f(X<428>);
+ void f(X<429>);
+ void f(X<430>);
+ void f(X<431>);
+ void f(X<432>);
+ void f(X<433>);
+ void f(X<434>);
+ void f(X<435>);
+ void f(X<436>);
+ void f(X<437>);
+ void f(X<438>);
+ void f(X<439>);
+ void f(X<440>);
+ void f(X<441>);
+ void f(X<442>);
+ void f(X<443>);
+ void f(X<444>);
+ void f(X<445>);
+ void f(X<446>);
+ void f(X<447>);
+ void f(X<448>);
+ void f(X<449>);
+ void f(X<450>);
+ void f(X<451>);
+ void f(X<452>);
+ void f(X<453>);
+ void f(X<454>);
+ void f(X<455>);
+ void f(X<456>);
+ void f(X<457>);
+ void f(X<458>);
+ void f(X<459>);
+ void f(X<460>);
+ void f(X<461>);
+ void f(X<462>);
+ void f(X<463>);
+ void f(X<464>);
+ void f(X<465>);
+ void f(X<466>);
+ void f(X<467>);
+ void f(X<468>);
+ void f(X<469>);
+ void f(X<470>);
+ void f(X<471>);
+ void f(X<472>);
+ void f(X<473>);
+ void f(X<474>);
+ void f(X<475>);
+ void f(X<476>);
+ void f(X<477>);
+ void f(X<478>);
+ void f(X<479>);
+ void f(X<480>);
+ void f(X<481>);
+ void f(X<482>);
+ void f(X<483>);
+ void f(X<484>);
+ void f(X<485>);
+ void f(X<486>);
+ void f(X<487>);
+ void f(X<488>);
+ void f(X<489>);
+ void f(X<490>);
+ void f(X<491>);
+ void f(X<492>);
+ void f(X<493>);
+ void f(X<494>);
+ void f(X<495>);
+ void f(X<496>);
+ void f(X<497>);
+ void f(X<498>);
+ void f(X<499>);
+ void f(X<500>);
+ void f(X<501>);
+ void f(X<502>);
+ void f(X<503>);
+ void f(X<504>);
+ void f(X<505>);
+ void f(X<506>);
+ void f(X<507>);
+ void f(X<508>);
+ void f(X<509>);
+ void f(X<510>);
+ void f(X<511>);
+ void f(X<512>);
+ void f(X<513>);
+ void f(X<514>);
+ void f(X<515>);
+ void f(X<516>);
+ void f(X<517>);
+ void f(X<518>);
+ void f(X<519>);
+ void f(X<520>);
+ void f(X<521>);
+ void f(X<522>);
+ void f(X<523>);
+ void f(X<524>);
+ void f(X<525>);
+ void f(X<526>);
+ void f(X<527>);
+ void f(X<528>);
+ void f(X<529>);
+ void f(X<530>);
+ void f(X<531>);
+ void f(X<532>);
+ void f(X<533>);
+ void f(X<534>);
+ void f(X<535>);
+ void f(X<536>);
+ void f(X<537>);
+ void f(X<538>);
+ void f(X<539>);
+ void f(X<540>);
+ void f(X<541>);
+ void f(X<542>);
+ void f(X<543>);
+ void f(X<544>);
+ void f(X<545>);
+ void f(X<546>);
+ void f(X<547>);
+ void f(X<548>);
+ void f(X<549>);
+ void f(X<550>);
+ void f(X<551>);
+ void f(X<552>);
+ void f(X<553>);
+ void f(X<554>);
+ void f(X<555>);
+ void f(X<556>);
+ void f(X<557>);
+ void f(X<558>);
+ void f(X<559>);
+ void f(X<560>);
+ void f(X<561>);
+ void f(X<562>);
+ void f(X<563>);
+ void f(X<564>);
+ void f(X<565>);
+ void f(X<566>);
+ void f(X<567>);
+ void f(X<568>);
+ void f(X<569>);
+ void f(X<570>);
+ void f(X<571>);
+ void f(X<572>);
+ void f(X<573>);
+ void f(X<574>);
+ void f(X<575>);
+ void f(X<576>);
+ void f(X<577>);
+ void f(X<578>);
+ void f(X<579>);
+ void f(X<580>);
+ void f(X<581>);
+ void f(X<582>);
+ void f(X<583>);
+ void f(X<584>);
+ void f(X<585>);
+ void f(X<586>);
+ void f(X<587>);
+ void f(X<588>);
+ void f(X<589>);
+ void f(X<590>);
+ void f(X<591>);
+ void f(X<592>);
+ void f(X<593>);
+ void f(X<594>);
+ void f(X<595>);
+ void f(X<596>);
+ void f(X<597>);
+ void f(X<598>);
+ void f(X<599>);
+ void f(X<600>);
+ void f(X<601>);
+ void f(X<602>);
+ void f(X<603>);
+ void f(X<604>);
+ void f(X<605>);
+ void f(X<606>);
+ void f(X<607>);
+ void f(X<608>);
+ void f(X<609>);
+ void f(X<610>);
+ void f(X<611>);
+ void f(X<612>);
+ void f(X<613>);
+ void f(X<614>);
+ void f(X<615>);
+ void f(X<616>);
+ void f(X<617>);
+ void f(X<618>);
+ void f(X<619>);
+ void f(X<620>);
+ void f(X<621>);
+ void f(X<622>);
+ void f(X<623>);
+ void f(X<624>);
+ void f(X<625>);
+ void f(X<626>);
+ void f(X<627>);
+ void f(X<628>);
+ void f(X<629>);
+ void f(X<630>);
+ void f(X<631>);
+ void f(X<632>);
+ void f(X<633>);
+ void f(X<634>);
+ void f(X<635>);
+ void f(X<636>);
+ void f(X<637>);
+ void f(X<638>);
+ void f(X<639>);
+ void f(X<640>);
+ void f(X<641>);
+ void f(X<642>);
+ void f(X<643>);
+ void f(X<644>);
+ void f(X<645>);
+ void f(X<646>);
+ void f(X<647>);
+ void f(X<648>);
+ void f(X<649>);
+ void f(X<650>);
+ void f(X<651>);
+ void f(X<652>);
+ void f(X<653>);
+ void f(X<654>);
+ void f(X<655>);
+ void f(X<656>);
+ void f(X<657>);
+ void f(X<658>);
+ void f(X<659>);
+ void f(X<660>);
+ void f(X<661>);
+ void f(X<662>);
+ void f(X<663>);
+ void f(X<664>);
+ void f(X<665>);
+ void f(X<666>);
+ void f(X<667>);
+ void f(X<668>);
+ void f(X<669>);
+ void f(X<670>);
+ void f(X<671>);
+ void f(X<672>);
+ void f(X<673>);
+ void f(X<674>);
+ void f(X<675>);
+ void f(X<676>);
+ void f(X<677>);
+ void f(X<678>);
+ void f(X<679>);
+ void f(X<680>);
+ void f(X<681>);
+ void f(X<682>);
+ void f(X<683>);
+ void f(X<684>);
+ void f(X<685>);
+ void f(X<686>);
+ void f(X<687>);
+ void f(X<688>);
+ void f(X<689>);
+ void f(X<690>);
+ void f(X<691>);
+ void f(X<692>);
+ void f(X<693>);
+ void f(X<694>);
+ void f(X<695>);
+ void f(X<696>);
+ void f(X<697>);
+ void f(X<698>);
+ void f(X<699>);
+ void f(X<700>);
+ void f(X<701>);
+ void f(X<702>);
+ void f(X<703>);
+ void f(X<704>);
+ void f(X<705>);
+ void f(X<706>);
+ void f(X<707>);
+ void f(X<708>);
+ void f(X<709>);
+ void f(X<710>);
+ void f(X<711>);
+ void f(X<712>);
+ void f(X<713>);
+ void f(X<714>);
+ void f(X<715>);
+ void f(X<716>);
+ void f(X<717>);
+ void f(X<718>);
+ void f(X<719>);
+ void f(X<720>);
+ void f(X<721>);
+ void f(X<722>);
+ void f(X<723>);
+ void f(X<724>);
+ void f(X<725>);
+ void f(X<726>);
+ void f(X<727>);
+ void f(X<728>);
+ void f(X<729>);
+ void f(X<730>);
+ void f(X<731>);
+ void f(X<732>);
+ void f(X<733>);
+ void f(X<734>);
+ void f(X<735>);
+ void f(X<736>);
+ void f(X<737>);
+ void f(X<738>);
+ void f(X<739>);
+ void f(X<740>);
+ void f(X<741>);
+ void f(X<742>);
+ void f(X<743>);
+ void f(X<744>);
+ void f(X<745>);
+ void f(X<746>);
+ void f(X<747>);
+ void f(X<748>);
+ void f(X<749>);
+ void f(X<750>);
+ void f(X<751>);
+ void f(X<752>);
+ void f(X<753>);
+ void f(X<754>);
+ void f(X<755>);
+ void f(X<756>);
+ void f(X<757>);
+ void f(X<758>);
+ void f(X<759>);
+ void f(X<760>);
+ void f(X<761>);
+ void f(X<762>);
+ void f(X<763>);
+ void f(X<764>);
+ void f(X<765>);
+ void f(X<766>);
+ void f(X<767>);
+ void f(X<768>);
+ void f(X<769>);
+ void f(X<770>);
+ void f(X<771>);
+ void f(X<772>);
+ void f(X<773>);
+ void f(X<774>);
+ void f(X<775>);
+ void f(X<776>);
+ void f(X<777>);
+ void f(X<778>);
+ void f(X<779>);
+ void f(X<780>);
+ void f(X<781>);
+ void f(X<782>);
+ void f(X<783>);
+ void f(X<784>);
+ void f(X<785>);
+ void f(X<786>);
+ void f(X<787>);
+ void f(X<788>);
+ void f(X<789>);
+ void f(X<790>);
+ void f(X<791>);
+ void f(X<792>);
+ void f(X<793>);
+ void f(X<794>);
+ void f(X<795>);
+ void f(X<796>);
+ void f(X<797>);
+ void f(X<798>);
+ void f(X<799>);
+ void f(X<800>);
+ void f(X<801>);
+ void f(X<802>);
+ void f(X<803>);
+ void f(X<804>);
+ void f(X<805>);
+ void f(X<806>);
+ void f(X<807>);
+ void f(X<808>);
+ void f(X<809>);
+ void f(X<810>);
+ void f(X<811>);
+ void f(X<812>);
+ void f(X<813>);
+ void f(X<814>);
+ void f(X<815>);
+ void f(X<816>);
+ void f(X<817>);
+ void f(X<818>);
+ void f(X<819>);
+ void f(X<820>);
+ void f(X<821>);
+ void f(X<822>);
+ void f(X<823>);
+ void f(X<824>);
+ void f(X<825>);
+ void f(X<826>);
+ void f(X<827>);
+ void f(X<828>);
+ void f(X<829>);
+ void f(X<830>);
+ void f(X<831>);
+ void f(X<832>);
+ void f(X<833>);
+ void f(X<834>);
+ void f(X<835>);
+ void f(X<836>);
+ void f(X<837>);
+ void f(X<838>);
+ void f(X<839>);
+ void f(X<840>);
+ void f(X<841>);
+ void f(X<842>);
+ void f(X<843>);
+ void f(X<844>);
+ void f(X<845>);
+ void f(X<846>);
+ void f(X<847>);
+ void f(X<848>);
+ void f(X<849>);
+ void f(X<850>);
+ void f(X<851>);
+ void f(X<852>);
+ void f(X<853>);
+ void f(X<854>);
+ void f(X<855>);
+ void f(X<856>);
+ void f(X<857>);
+ void f(X<858>);
+ void f(X<859>);
+ void f(X<860>);
+ void f(X<861>);
+ void f(X<862>);
+ void f(X<863>);
+ void f(X<864>);
+ void f(X<865>);
+ void f(X<866>);
+ void f(X<867>);
+ void f(X<868>);
+ void f(X<869>);
+ void f(X<870>);
+ void f(X<871>);
+ void f(X<872>);
+ void f(X<873>);
+ void f(X<874>);
+ void f(X<875>);
+ void f(X<876>);
+ void f(X<877>);
+ void f(X<878>);
+ void f(X<879>);
+ void f(X<880>);
+ void f(X<881>);
+ void f(X<882>);
+ void f(X<883>);
+ void f(X<884>);
+ void f(X<885>);
+ void f(X<886>);
+ void f(X<887>);
+ void f(X<888>);
+ void f(X<889>);
+ void f(X<890>);
+ void f(X<891>);
+ void f(X<892>);
+ void f(X<893>);
+ void f(X<894>);
+ void f(X<895>);
+ void f(X<896>);
+ void f(X<897>);
+ void f(X<898>);
+ void f(X<899>);
+ void f(X<900>);
+ void f(X<901>);
+ void f(X<902>);
+ void f(X<903>);
+ void f(X<904>);
+ void f(X<905>);
+ void f(X<906>);
+ void f(X<907>);
+ void f(X<908>);
+ void f(X<909>);
+ void f(X<910>);
+ void f(X<911>);
+ void f(X<912>);
+ void f(X<913>);
+ void f(X<914>);
+ void f(X<915>);
+ void f(X<916>);
+ void f(X<917>);
+ void f(X<918>);
+ void f(X<919>);
+ void f(X<920>);
+ void f(X<921>);
+ void f(X<922>);
+ void f(X<923>);
+ void f(X<924>);
+ void f(X<925>);
+ void f(X<926>);
+ void f(X<927>);
+ void f(X<928>);
+ void f(X<929>);
+ void f(X<930>);
+ void f(X<931>);
+ void f(X<932>);
+ void f(X<933>);
+ void f(X<934>);
+ void f(X<935>);
+ void f(X<936>);
+ void f(X<937>);
+ void f(X<938>);
+ void f(X<939>);
+ void f(X<940>);
+ void f(X<941>);
+ void f(X<942>);
+ void f(X<943>);
+ void f(X<944>);
+ void f(X<945>);
+ void f(X<946>);
+ void f(X<947>);
+ void f(X<948>);
+ void f(X<949>);
+ void f(X<950>);
+ void f(X<951>);
+ void f(X<952>);
+ void f(X<953>);
+ void f(X<954>);
+ void f(X<955>);
+ void f(X<956>);
+ void f(X<957>);
+ void f(X<958>);
+ void f(X<959>);
+ void f(X<960>);
+ void f(X<961>);
+ void f(X<962>);
+ void f(X<963>);
+ void f(X<964>);
+ void f(X<965>);
+ void f(X<966>);
+ void f(X<967>);
+ void f(X<968>);
+ void f(X<969>);
+ void f(X<970>);
+ void f(X<971>);
+ void f(X<972>);
+ void f(X<973>);
+ void f(X<974>);
+ void f(X<975>);
+ void f(X<976>);
+ void f(X<977>);
+ void f(X<978>);
+ void f(X<979>);
+ void f(X<980>);
+ void f(X<981>);
+ void f(X<982>);
+ void f(X<983>);
+ void f(X<984>);
+ void f(X<985>);
+ void f(X<986>);
+ void f(X<987>);
+ void f(X<988>);
+ void f(X<989>);
+ void f(X<990>);
+ void f(X<991>);
+ void f(X<992>);
+ void f(X<993>);
+ void f(X<994>);
+ void f(X<995>);
+ void f(X<996>);
+ void f(X<997>);
+ void f(X<998>);
+ void f(X<999>);
+ void f(X<1000>);
+ void f(X<1001>);
+ void f(X<1002>);
+ void f(X<1003>);
+ void f(X<1004>);
+ void f(X<1005>);
+ void f(X<1006>);
+ void f(X<1007>);
+ void f(X<1008>);
+ void f(X<1009>);
+ void f(X<1010>);
+ void f(X<1011>);
+ void f(X<1012>);
+ void f(X<1013>);
+ void f(X<1014>);
+ void f(X<1015>);
+ void f(X<1016>);
+ void f(X<1017>);
+ void f(X<1018>);
+ void f(X<1019>);
+ void f(X<1020>);
+ void f(X<1021>);
+ void f(X<1022>);
+ void f(X<1023>);
+ void f(X<1024>);
+ void f(X<1025>);
+ void f(X<1026>);
+ void f(X<1027>);
+ void f(X<1028>);
+ void f(X<1029>);
+ void f(X<1030>);
+ void f(X<1031>);
+ void f(X<1032>);
+ void f(X<1033>);
+ void f(X<1034>);
+ void f(X<1035>);
+ void f(X<1036>);
+ void f(X<1037>);
+ void f(X<1038>);
+ void f(X<1039>);
+ void f(X<1040>);
+ void f(X<1041>);
+ void f(X<1042>);
+ void f(X<1043>);
+ void f(X<1044>);
+ void f(X<1045>);
+ void f(X<1046>);
+ void f(X<1047>);
+ void f(X<1048>);
+ void f(X<1049>);
+ void f(X<1050>);
+ void f(X<1051>);
+ void f(X<1052>);
+ void f(X<1053>);
+ void f(X<1054>);
+ void f(X<1055>);
+ void f(X<1056>);
+ void f(X<1057>);
+ void f(X<1058>);
+ void f(X<1059>);
+ void f(X<1060>);
+ void f(X<1061>);
+ void f(X<1062>);
+ void f(X<1063>);
+ void f(X<1064>);
+ void f(X<1065>);
+ void f(X<1066>);
+ void f(X<1067>);
+ void f(X<1068>);
+ void f(X<1069>);
+ void f(X<1070>);
+ void f(X<1071>);
+ void f(X<1072>);
+ void f(X<1073>);
+ void f(X<1074>);
+ void f(X<1075>);
+ void f(X<1076>);
+ void f(X<1077>);
+ void f(X<1078>);
+ void f(X<1079>);
+ void f(X<1080>);
+ void f(X<1081>);
+ void f(X<1082>);
+ void f(X<1083>);
+ void f(X<1084>);
+ void f(X<1085>);
+ void f(X<1086>);
+ void f(X<1087>);
+ void f(X<1088>);
+ void f(X<1089>);
+ void f(X<1090>);
+ void f(X<1091>);
+ void f(X<1092>);
+ void f(X<1093>);
+ void f(X<1094>);
+ void f(X<1095>);
+ void f(X<1096>);
+ void f(X<1097>);
+ void f(X<1098>);
+ void f(X<1099>);
+ void f(X<1100>);
+ void f(X<1101>);
+ void f(X<1102>);
+ void f(X<1103>);
+ void f(X<1104>);
+ void f(X<1105>);
+ void f(X<1106>);
+ void f(X<1107>);
+ void f(X<1108>);
+ void f(X<1109>);
+ void f(X<1110>);
+ void f(X<1111>);
+ void f(X<1112>);
+ void f(X<1113>);
+ void f(X<1114>);
+ void f(X<1115>);
+ void f(X<1116>);
+ void f(X<1117>);
+ void f(X<1118>);
+ void f(X<1119>);
+ void f(X<1120>);
+ void f(X<1121>);
+ void f(X<1122>);
+ void f(X<1123>);
+ void f(X<1124>);
+ void f(X<1125>);
+ void f(X<1126>);
+ void f(X<1127>);
+ void f(X<1128>);
+ void f(X<1129>);
+ void f(X<1130>);
+ void f(X<1131>);
+ void f(X<1132>);
+ void f(X<1133>);
+ void f(X<1134>);
+ void f(X<1135>);
+ void f(X<1136>);
+ void f(X<1137>);
+ void f(X<1138>);
+ void f(X<1139>);
+ void f(X<1140>);
+ void f(X<1141>);
+ void f(X<1142>);
+ void f(X<1143>);
+ void f(X<1144>);
+ void f(X<1145>);
+ void f(X<1146>);
+ void f(X<1147>);
+ void f(X<1148>);
+ void f(X<1149>);
+ void f(X<1150>);
+ void f(X<1151>);
+ void f(X<1152>);
+ void f(X<1153>);
+ void f(X<1154>);
+ void f(X<1155>);
+ void f(X<1156>);
+ void f(X<1157>);
+ void f(X<1158>);
+ void f(X<1159>);
+ void f(X<1160>);
+ void f(X<1161>);
+ void f(X<1162>);
+ void f(X<1163>);
+ void f(X<1164>);
+ void f(X<1165>);
+ void f(X<1166>);
+ void f(X<1167>);
+ void f(X<1168>);
+ void f(X<1169>);
+ void f(X<1170>);
+ void f(X<1171>);
+ void f(X<1172>);
+ void f(X<1173>);
+ void f(X<1174>);
+ void f(X<1175>);
+ void f(X<1176>);
+ void f(X<1177>);
+ void f(X<1178>);
+ void f(X<1179>);
+ voi