diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-02-08 00:37:45 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-02-08 00:37:45 +0000 |
commit | 2bb07c1dfeda50d7edcee512932b86a1a65c6e69 (patch) | |
tree | dbe3bfc7737c2f75676461415704be2a6a1734d8 | |
parent | ada7191795dde85a620008094fbe5464abdb916b (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.cpp | 12 | ||||
-rw-r--r-- | test/Modules/Inputs/cxx-many-overloads.h | 2004 | ||||
-rw-r--r-- | test/Modules/Inputs/module.map | 4 | ||||
-rw-r--r-- | test/Modules/cxx-many-overloads.cpp | 9 |
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 |