[cfe-commits] r155823 - in /cfe/trunk: include/clang/Parse/Parser.h test/Parser/recursion-limits.cpp

Douglas Gregor dgregor at apple.com
Mon Apr 30 10:52:47 PDT 2012


This is a regression from 3.0. Bill, please pull into the 3.1 branch.

	- Doug

On Apr 30, 2012, at 9:20 AM, Douglas Gregor wrote:

> Author: dgregor
> Date: Mon Apr 30 11:20:27 2012
> New Revision: 155823
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=155823&view=rev
> Log:
> Restore paren, bracket and brace counts in parser when
> TentativeParsingAction is reverted, from Pasi Parviainen! Fixes
> PR12480 / <rdar://problem/11341251>.
> 
> Added:
>    cfe/trunk/test/Parser/recursion-limits.cpp   (with props)
> Modified:
>    cfe/trunk/include/clang/Parse/Parser.h
> 
> Modified: cfe/trunk/include/clang/Parse/Parser.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=155823&r1=155822&r2=155823&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Parse/Parser.h (original)
> +++ cfe/trunk/include/clang/Parse/Parser.h Mon Apr 30 11:20:27 2012
> @@ -584,11 +584,15 @@
>   class TentativeParsingAction {
>     Parser &P;
>     Token PrevTok;
> +    unsigned short PrevParenCount, PrevBracketCount, PrevBraceCount;
>     bool isActive;
> 
>   public:
>     explicit TentativeParsingAction(Parser& p) : P(p) {
>       PrevTok = P.Tok;
> +      PrevParenCount = P.ParenCount;
> +      PrevBracketCount = P.BracketCount;
> +      PrevBraceCount = P.BraceCount;
>       P.PP.EnableBacktrackAtThisPos();
>       isActive = true;
>     }
> @@ -601,6 +605,9 @@
>       assert(isActive && "Parsing action was finished!");
>       P.PP.Backtrack();
>       P.Tok = PrevTok;
> +      P.ParenCount = PrevParenCount;
> +      P.BracketCount = PrevBracketCount;
> +      P.BraceCount = PrevBraceCount;
>       isActive = false;
>     }
>     ~TentativeParsingAction() {
> 
> Added: cfe/trunk/test/Parser/recursion-limits.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/recursion-limits.cpp?rev=155823&view=auto
> ==============================================================================
> --- cfe/trunk/test/Parser/recursion-limits.cpp (added)
> +++ cfe/trunk/test/Parser/recursion-limits.cpp Mon Apr 30 11:20:27 2012
> @@ -0,0 +1,259 @@
> +// RUN: %clang_cc1 -fsyntax-only %s -verify
> +class outer {
> +  class inner1 { inner1(); };
> +  class inner2 { inner2(); };
> +  class inner3 { inner3(); };
> +  class inner4 { inner4(); };
> +  class inner5 { inner5(); };
> +  class inner6 { inner6(); };
> +  class inner7 { inner7(); };
> +  class inner8 { inner8(); };
> +  class inner9 { inner9(); };
> +  class inner10 { inner10(); };
> +  class inner11 { inner11(); };
> +  class inner12 { inner12(); };
> +  class inner13 { inner13(); };
> +  class inner14 { inner14(); };
> +  class inner15 { inner15(); };
> +  class inner16 { inner16(); };
> +  class inner17 { inner17(); };
> +  class inner18 { inner18(); };
> +  class inner19 { inner19(); };
> +  class inner20 { inner20(); };
> +  class inner21 { inner21(); };
> +  class inner22 { inner22(); };
> +  class inner23 { inner23(); };
> +  class inner24 { inner24(); };
> +  class inner25 { inner25(); };
> +  class inner26 { inner26(); };
> +  class inner27 { inner27(); };
> +  class inner28 { inner28(); };
> +  class inner29 { inner29(); };
> +  class inner30 { inner30(); };
> +  class inner31 { inner31(); };
> +  class inner32 { inner32(); };
> +  class inner33 { inner33(); };
> +  class inner34 { inner34(); };
> +  class inner35 { inner35(); };
> +  class inner36 { inner36(); };
> +  class inner37 { inner37(); };
> +  class inner38 { inner38(); };
> +  class inner39 { inner39(); };
> +  class inner40 { inner40(); };
> +  class inner41 { inner41(); };
> +  class inner42 { inner42(); };
> +  class inner43 { inner43(); };
> +  class inner44 { inner44(); };
> +  class inner45 { inner45(); };
> +  class inner46 { inner46(); };
> +  class inner47 { inner47(); };
> +  class inner48 { inner48(); };
> +  class inner49 { inner49(); };
> +  class inner50 { inner50(); };
> +  class inner51 { inner51(); };
> +  class inner52 { inner52(); };
> +  class inner53 { inner53(); };
> +  class inner54 { inner54(); };
> +  class inner55 { inner55(); };
> +  class inner56 { inner56(); };
> +  class inner57 { inner57(); };
> +  class inner58 { inner58(); };
> +  class inner59 { inner59(); };
> +  class inner60 { inner60(); };
> +  class inner61 { inner61(); };
> +  class inner62 { inner62(); };
> +  class inner63 { inner63(); };
> +  class inner64 { inner64(); };
> +  class inner65 { inner65(); };
> +  class inner66 { inner66(); };
> +  class inner67 { inner67(); };
> +  class inner68 { inner68(); };
> +  class inner69 { inner69(); };
> +  class inner70 { inner70(); };
> +  class inner71 { inner71(); };
> +  class inner72 { inner72(); };
> +  class inner73 { inner73(); };
> +  class inner74 { inner74(); };
> +  class inner75 { inner75(); };
> +  class inner76 { inner76(); };
> +  class inner77 { inner77(); };
> +  class inner78 { inner78(); };
> +  class inner79 { inner79(); };
> +  class inner80 { inner80(); };
> +  class inner81 { inner81(); };
> +  class inner82 { inner82(); };
> +  class inner83 { inner83(); };
> +  class inner84 { inner84(); };
> +  class inner85 { inner85(); };
> +  class inner86 { inner86(); };
> +  class inner87 { inner87(); };
> +  class inner88 { inner88(); };
> +  class inner89 { inner89(); };
> +  class inner90 { inner90(); };
> +  class inner91 { inner91(); };
> +  class inner92 { inner92(); };
> +  class inner93 { inner93(); };
> +  class inner94 { inner94(); };
> +  class inner95 { inner95(); };
> +  class inner96 { inner96(); };
> +  class inner97 { inner97(); };
> +  class inner98 { inner98(); };
> +  class inner99 { inner99(); };
> +  class inner100 { inner100(); };
> +  class inner101 { inner101(); };
> +  class inner102 { inner102(); };
> +  class inner103 { inner103(); };
> +  class inner104 { inner104(); };
> +  class inner105 { inner105(); };
> +  class inner106 { inner106(); };
> +  class inner107 { inner107(); };
> +  class inner108 { inner108(); };
> +  class inner109 { inner109(); };
> +  class inner110 { inner110(); };
> +  class inner111 { inner111(); };
> +  class inner112 { inner112(); };
> +  class inner113 { inner113(); };
> +  class inner114 { inner114(); };
> +  class inner115 { inner115(); };
> +  class inner116 { inner116(); };
> +  class inner117 { inner117(); };
> +  class inner118 { inner118(); };
> +  class inner119 { inner119(); };
> +  class inner120 { inner120(); };
> +  class inner121 { inner121(); };
> +  class inner122 { inner122(); };
> +  class inner123 { inner123(); };
> +  class inner124 { inner124(); };
> +  class inner125 { inner125(); };
> +  class inner126 { inner126(); };
> +  class inner127 { inner127(); };
> +  class inner128 { inner128(); };
> +  class inner129 { inner129(); };
> +  class inner130 { inner130(); };
> +  class inner131 { inner131(); };
> +  class inner132 { inner132(); };
> +  class inner133 { inner133(); };
> +  class inner134 { inner134(); };
> +  class inner135 { inner135(); };
> +  class inner136 { inner136(); };
> +  class inner137 { inner137(); };
> +  class inner138 { inner138(); };
> +  class inner139 { inner139(); };
> +  class inner140 { inner140(); };
> +  class inner141 { inner141(); };
> +  class inner142 { inner142(); };
> +  class inner143 { inner143(); };
> +  class inner144 { inner144(); };
> +  class inner145 { inner145(); };
> +  class inner146 { inner146(); };
> +  class inner147 { inner147(); };
> +  class inner148 { inner148(); };
> +  class inner149 { inner149(); };
> +  class inner150 { inner150(); };
> +  class inner151 { inner151(); };
> +  class inner152 { inner152(); };
> +  class inner153 { inner153(); };
> +  class inner154 { inner154(); };
> +  class inner155 { inner155(); };
> +  class inner156 { inner156(); };
> +  class inner157 { inner157(); };
> +  class inner158 { inner158(); };
> +  class inner159 { inner159(); };
> +  class inner160 { inner160(); };
> +  class inner161 { inner161(); };
> +  class inner162 { inner162(); };
> +  class inner163 { inner163(); };
> +  class inner164 { inner164(); };
> +  class inner165 { inner165(); };
> +  class inner166 { inner166(); };
> +  class inner167 { inner167(); };
> +  class inner168 { inner168(); };
> +  class inner169 { inner169(); };
> +  class inner170 { inner170(); };
> +  class inner171 { inner171(); };
> +  class inner172 { inner172(); };
> +  class inner173 { inner173(); };
> +  class inner174 { inner174(); };
> +  class inner175 { inner175(); };
> +  class inner176 { inner176(); };
> +  class inner177 { inner177(); };
> +  class inner178 { inner178(); };
> +  class inner179 { inner179(); };
> +  class inner180 { inner180(); };
> +  class inner181 { inner181(); };
> +  class inner182 { inner182(); };
> +  class inner183 { inner183(); };
> +  class inner184 { inner184(); };
> +  class inner185 { inner185(); };
> +  class inner186 { inner186(); };
> +  class inner187 { inner187(); };
> +  class inner188 { inner188(); };
> +  class inner189 { inner189(); };
> +  class inner190 { inner190(); };
> +  class inner191 { inner191(); };
> +  class inner192 { inner192(); };
> +  class inner193 { inner193(); };
> +  class inner194 { inner194(); };
> +  class inner195 { inner195(); };
> +  class inner196 { inner196(); };
> +  class inner197 { inner197(); };
> +  class inner198 { inner198(); };
> +  class inner199 { inner199(); };
> +  class inner200 { inner200(); };
> +  class inner201 { inner201(); };
> +  class inner202 { inner202(); };
> +  class inner203 { inner203(); };
> +  class inner204 { inner204(); };
> +  class inner205 { inner205(); };
> +  class inner206 { inner206(); };
> +  class inner207 { inner207(); };
> +  class inner208 { inner208(); };
> +  class inner209 { inner209(); };
> +  class inner210 { inner210(); };
> +  class inner211 { inner211(); };
> +  class inner212 { inner212(); };
> +  class inner213 { inner213(); };
> +  class inner214 { inner214(); };
> +  class inner215 { inner215(); };
> +  class inner216 { inner216(); };
> +  class inner217 { inner217(); };
> +  class inner218 { inner218(); };
> +  class inner219 { inner219(); };
> +  class inner220 { inner220(); };
> +  class inner221 { inner221(); };
> +  class inner222 { inner222(); };
> +  class inner223 { inner223(); };
> +  class inner224 { inner224(); };
> +  class inner225 { inner225(); };
> +  class inner226 { inner226(); };
> +  class inner227 { inner227(); };
> +  class inner228 { inner228(); };
> +  class inner229 { inner229(); };
> +  class inner230 { inner230(); };
> +  class inner231 { inner231(); };
> +  class inner232 { inner232(); };
> +  class inner233 { inner233(); };
> +  class inner234 { inner234(); };
> +  class inner235 { inner235(); };
> +  class inner236 { inner236(); };
> +  class inner237 { inner237(); };
> +  class inner238 { inner238(); };
> +  class inner239 { inner239(); };
> +  class inner240 { inner240(); };
> +  class inner241 { inner241(); };
> +  class inner242 { inner242(); };
> +  class inner243 { inner243(); };
> +  class inner244 { inner244(); };
> +  class inner245 { inner245(); };
> +  class inner246 { inner246(); };
> +  class inner247 { inner247(); };
> +  class inner248 { inner248(); };
> +  class inner249 { inner249(); };
> +  class inner250 { inner250(); };
> +  class inner251 { inner251(); };
> +  class inner252 { inner252(); };
> +  class inner253 { inner253(); };
> +  class inner254 { inner254(); };
> +  class inner255 { inner255(); };
> +  class inner256 { inner256(); };
> +};
> 
> Propchange: cfe/trunk/test/Parser/recursion-limits.cpp
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> Propchange: cfe/trunk/test/Parser/recursion-limits.cpp
> ------------------------------------------------------------------------------
>    svn:keywords = Id
> 
> Propchange: cfe/trunk/test/Parser/recursion-limits.cpp
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list