Re: r322813 - Fix Scope::dump()

2018-01-22 Thread Hans Wennborg via cfe-commits
Thanks! r323109.

On Sat, Jan 20, 2018 at 12:53 AM, Richard Smith  wrote:
> Sounds like a good idea to me.
>
> On 19 Jan 2018 15:23, "Richard Trieu via cfe-commits"
>  wrote:
>>
>> Hans,
>>
>> I recommend merging this revision into the release.  It fixes an infinite
>> loop in Scope::dump()
>>
>> Richard
>>
>> On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits
>>  wrote:
>>>
>>> Author: rtrieu
>>> Date: Wed Jan 17 20:28:56 2018
>>> New Revision: 322813
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
>>> Log:
>>> Fix Scope::dump()
>>>
>>> The dump function for Scope only has 20 out of the 24 flags.  Since it
>>> looped
>>> until no flags were left, having an unknown flag lead to an infinite
>>> loop.
>>> That loop has been changed to a single pass for each flag, plus an assert
>>> to
>>> alert if new flags are added.
>>>
>>> Modified:
>>> cfe/trunk/lib/Sema/Scope.cpp
>>>
>>> Modified: cfe/trunk/lib/Sema/Scope.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope.cpp?rev=322813=322812=322813=diff
>>>
>>> ==
>>> --- cfe/trunk/lib/Sema/Scope.cpp (original)
>>> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
>>> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>>>if (HasFlags)
>>>  OS << "Flags: ";
>>>
>>> -  while (Flags) {
>>> -if (Flags & FnScope) {
>>> -  OS << "FnScope";
>>> -  Flags &= ~FnScope;
>>> -} else if (Flags & BreakScope) {
>>> -  OS << "BreakScope";
>>> -  Flags &= ~BreakScope;
>>> -} else if (Flags & ContinueScope) {
>>> -  OS << "ContinueScope";
>>> -  Flags &= ~ContinueScope;
>>> -} else if (Flags & DeclScope) {
>>> -  OS << "DeclScope";
>>> -  Flags &= ~DeclScope;
>>> -} else if (Flags & ControlScope) {
>>> -  OS << "ControlScope";
>>> -  Flags &= ~ControlScope;
>>> -} else if (Flags & ClassScope) {
>>> -  OS << "ClassScope";
>>> -  Flags &= ~ClassScope;
>>> -} else if (Flags & BlockScope) {
>>> -  OS << "BlockScope";
>>> -  Flags &= ~BlockScope;
>>> -} else if (Flags & TemplateParamScope) {
>>> -  OS << "TemplateParamScope";
>>> -  Flags &= ~TemplateParamScope;
>>> -} else if (Flags & FunctionPrototypeScope) {
>>> -  OS << "FunctionPrototypeScope";
>>> -  Flags &= ~FunctionPrototypeScope;
>>> -} else if (Flags & FunctionDeclarationScope) {
>>> -  OS << "FunctionDeclarationScope";
>>> -  Flags &= ~FunctionDeclarationScope;
>>> -} else if (Flags & AtCatchScope) {
>>> -  OS << "AtCatchScope";
>>> -  Flags &= ~AtCatchScope;
>>> -} else if (Flags & ObjCMethodScope) {
>>> -  OS << "ObjCMethodScope";
>>> -  Flags &= ~ObjCMethodScope;
>>> -} else if (Flags & SwitchScope) {
>>> -  OS << "SwitchScope";
>>> -  Flags &= ~SwitchScope;
>>> -} else if (Flags & TryScope) {
>>> -  OS << "TryScope";
>>> -  Flags &= ~TryScope;
>>> -} else if (Flags & FnTryCatchScope) {
>>> -  OS << "FnTryCatchScope";
>>> -  Flags &= ~FnTryCatchScope;
>>> -} else if (Flags & SEHTryScope) {
>>> -  OS << "SEHTryScope";
>>> -  Flags &= ~SEHTryScope;
>>> -} else if (Flags & SEHExceptScope) {
>>> -  OS << "SEHExceptScope";
>>> -  Flags &= ~SEHExceptScope;
>>> -} else if (Flags & OpenMPDirectiveScope) {
>>> -  OS << "OpenMPDirectiveScope";
>>> -  Flags &= ~OpenMPDirectiveScope;
>>> -} else if (Flags & OpenMPLoopDirectiveScope) {
>>> -  OS << "OpenMPLoopDirectiveScope";
>>> -  Flags &= ~OpenMPLoopDirectiveScope;
>>> -} else if (Flags & OpenMPSimdDirectiveScope) {
>>> -  OS << "OpenMPSimdDirectiveScope";
>>> -  Flags &= ~OpenMPSimdDirectiveScope;
>>> -}
>>> +  std::pair FlagInfo[] = {
>>> +  {FnScope, "FnScope"},
>>> +  {BreakScope, "BreakScope"},
>>> +  {ContinueScope, "ContinueScope"},
>>> +  {DeclScope, "DeclScope"},
>>> +  {ControlScope, "ControlScope"},
>>> +  {ClassScope, "ClassScope"},
>>> +  {BlockScope, "BlockScope"},
>>> +  {TemplateParamScope, "TemplateParamScope"},
>>> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
>>> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
>>> +  {AtCatchScope, "AtCatchScope"},
>>> +  {ObjCMethodScope, "ObjCMethodScope"},
>>> +  {SwitchScope, "SwitchScope"},
>>> +  {TryScope, "TryScope"},
>>> +  {FnTryCatchScope, "FnTryCatchScope"},
>>> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
>>> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
>>> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
>>> +  {EnumScope, "EnumScope"},
>>> +  {SEHTryScope, "SEHTryScope"},
>>> +  {SEHExceptScope, "SEHExceptScope"},
>>> +  {SEHFilterScope, "SEHFilterScope"},
>>> +  

Re: r322813 - Fix Scope::dump()

2018-01-19 Thread Richard Smith via cfe-commits
Sounds like a good idea to me.

On 19 Jan 2018 15:23, "Richard Trieu via cfe-commits" <
cfe-commits@lists.llvm.org> wrote:

> Hans,
>
> I recommend merging this revision into the release.  It fixes an infinite
> loop in Scope::dump()
>
> Richard
>
> On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: rtrieu
>> Date: Wed Jan 17 20:28:56 2018
>> New Revision: 322813
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
>> Log:
>> Fix Scope::dump()
>>
>> The dump function for Scope only has 20 out of the 24 flags.  Since it
>> looped
>> until no flags were left, having an unknown flag lead to an infinite loop.
>> That loop has been changed to a single pass for each flag, plus an assert
>> to
>> alert if new flags are added.
>>
>> Modified:
>> cfe/trunk/lib/Sema/Scope.cpp
>>
>> Modified: cfe/trunk/lib/Sema/Scope.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope
>> .cpp?rev=322813=322812=322813=diff
>> 
>> ==
>> --- cfe/trunk/lib/Sema/Scope.cpp (original)
>> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
>> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>>if (HasFlags)
>>  OS << "Flags: ";
>>
>> -  while (Flags) {
>> -if (Flags & FnScope) {
>> -  OS << "FnScope";
>> -  Flags &= ~FnScope;
>> -} else if (Flags & BreakScope) {
>> -  OS << "BreakScope";
>> -  Flags &= ~BreakScope;
>> -} else if (Flags & ContinueScope) {
>> -  OS << "ContinueScope";
>> -  Flags &= ~ContinueScope;
>> -} else if (Flags & DeclScope) {
>> -  OS << "DeclScope";
>> -  Flags &= ~DeclScope;
>> -} else if (Flags & ControlScope) {
>> -  OS << "ControlScope";
>> -  Flags &= ~ControlScope;
>> -} else if (Flags & ClassScope) {
>> -  OS << "ClassScope";
>> -  Flags &= ~ClassScope;
>> -} else if (Flags & BlockScope) {
>> -  OS << "BlockScope";
>> -  Flags &= ~BlockScope;
>> -} else if (Flags & TemplateParamScope) {
>> -  OS << "TemplateParamScope";
>> -  Flags &= ~TemplateParamScope;
>> -} else if (Flags & FunctionPrototypeScope) {
>> -  OS << "FunctionPrototypeScope";
>> -  Flags &= ~FunctionPrototypeScope;
>> -} else if (Flags & FunctionDeclarationScope) {
>> -  OS << "FunctionDeclarationScope";
>> -  Flags &= ~FunctionDeclarationScope;
>> -} else if (Flags & AtCatchScope) {
>> -  OS << "AtCatchScope";
>> -  Flags &= ~AtCatchScope;
>> -} else if (Flags & ObjCMethodScope) {
>> -  OS << "ObjCMethodScope";
>> -  Flags &= ~ObjCMethodScope;
>> -} else if (Flags & SwitchScope) {
>> -  OS << "SwitchScope";
>> -  Flags &= ~SwitchScope;
>> -} else if (Flags & TryScope) {
>> -  OS << "TryScope";
>> -  Flags &= ~TryScope;
>> -} else if (Flags & FnTryCatchScope) {
>> -  OS << "FnTryCatchScope";
>> -  Flags &= ~FnTryCatchScope;
>> -} else if (Flags & SEHTryScope) {
>> -  OS << "SEHTryScope";
>> -  Flags &= ~SEHTryScope;
>> -} else if (Flags & SEHExceptScope) {
>> -  OS << "SEHExceptScope";
>> -  Flags &= ~SEHExceptScope;
>> -} else if (Flags & OpenMPDirectiveScope) {
>> -  OS << "OpenMPDirectiveScope";
>> -  Flags &= ~OpenMPDirectiveScope;
>> -} else if (Flags & OpenMPLoopDirectiveScope) {
>> -  OS << "OpenMPLoopDirectiveScope";
>> -  Flags &= ~OpenMPLoopDirectiveScope;
>> -} else if (Flags & OpenMPSimdDirectiveScope) {
>> -  OS << "OpenMPSimdDirectiveScope";
>> -  Flags &= ~OpenMPSimdDirectiveScope;
>> -}
>> +  std::pair FlagInfo[] = {
>> +  {FnScope, "FnScope"},
>> +  {BreakScope, "BreakScope"},
>> +  {ContinueScope, "ContinueScope"},
>> +  {DeclScope, "DeclScope"},
>> +  {ControlScope, "ControlScope"},
>> +  {ClassScope, "ClassScope"},
>> +  {BlockScope, "BlockScope"},
>> +  {TemplateParamScope, "TemplateParamScope"},
>> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
>> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
>> +  {AtCatchScope, "AtCatchScope"},
>> +  {ObjCMethodScope, "ObjCMethodScope"},
>> +  {SwitchScope, "SwitchScope"},
>> +  {TryScope, "TryScope"},
>> +  {FnTryCatchScope, "FnTryCatchScope"},
>> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
>> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
>> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
>> +  {EnumScope, "EnumScope"},
>> +  {SEHTryScope, "SEHTryScope"},
>> +  {SEHExceptScope, "SEHExceptScope"},
>> +  {SEHFilterScope, "SEHFilterScope"},
>> +  {CompoundStmtScope, "CompoundStmtScope"},
>> +  {ClassInheritanceScope, "ClassInheritanceScope"}};
>>
>> -if (Flags)
>> -  OS << " | ";
>> +  for (auto Info : FlagInfo) {
>> +if (Flags & Info.first) {
>> +  OS << Info.second;
>> + 

Re: r322813 - Fix Scope::dump()

2018-01-19 Thread Richard Trieu via cfe-commits
Hans,

I recommend merging this revision into the release.  It fixes an infinite
loop in Scope::dump()

Richard

On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: rtrieu
> Date: Wed Jan 17 20:28:56 2018
> New Revision: 322813
>
> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
> Log:
> Fix Scope::dump()
>
> The dump function for Scope only has 20 out of the 24 flags.  Since it
> looped
> until no flags were left, having an unknown flag lead to an infinite loop.
> That loop has been changed to a single pass for each flag, plus an assert
> to
> alert if new flags are added.
>
> Modified:
> cfe/trunk/lib/Sema/Scope.cpp
>
> Modified: cfe/trunk/lib/Sema/Scope.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope
> .cpp?rev=322813=322812=322813=diff
> 
> ==
> --- cfe/trunk/lib/Sema/Scope.cpp (original)
> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>if (HasFlags)
>  OS << "Flags: ";
>
> -  while (Flags) {
> -if (Flags & FnScope) {
> -  OS << "FnScope";
> -  Flags &= ~FnScope;
> -} else if (Flags & BreakScope) {
> -  OS << "BreakScope";
> -  Flags &= ~BreakScope;
> -} else if (Flags & ContinueScope) {
> -  OS << "ContinueScope";
> -  Flags &= ~ContinueScope;
> -} else if (Flags & DeclScope) {
> -  OS << "DeclScope";
> -  Flags &= ~DeclScope;
> -} else if (Flags & ControlScope) {
> -  OS << "ControlScope";
> -  Flags &= ~ControlScope;
> -} else if (Flags & ClassScope) {
> -  OS << "ClassScope";
> -  Flags &= ~ClassScope;
> -} else if (Flags & BlockScope) {
> -  OS << "BlockScope";
> -  Flags &= ~BlockScope;
> -} else if (Flags & TemplateParamScope) {
> -  OS << "TemplateParamScope";
> -  Flags &= ~TemplateParamScope;
> -} else if (Flags & FunctionPrototypeScope) {
> -  OS << "FunctionPrototypeScope";
> -  Flags &= ~FunctionPrototypeScope;
> -} else if (Flags & FunctionDeclarationScope) {
> -  OS << "FunctionDeclarationScope";
> -  Flags &= ~FunctionDeclarationScope;
> -} else if (Flags & AtCatchScope) {
> -  OS << "AtCatchScope";
> -  Flags &= ~AtCatchScope;
> -} else if (Flags & ObjCMethodScope) {
> -  OS << "ObjCMethodScope";
> -  Flags &= ~ObjCMethodScope;
> -} else if (Flags & SwitchScope) {
> -  OS << "SwitchScope";
> -  Flags &= ~SwitchScope;
> -} else if (Flags & TryScope) {
> -  OS << "TryScope";
> -  Flags &= ~TryScope;
> -} else if (Flags & FnTryCatchScope) {
> -  OS << "FnTryCatchScope";
> -  Flags &= ~FnTryCatchScope;
> -} else if (Flags & SEHTryScope) {
> -  OS << "SEHTryScope";
> -  Flags &= ~SEHTryScope;
> -} else if (Flags & SEHExceptScope) {
> -  OS << "SEHExceptScope";
> -  Flags &= ~SEHExceptScope;
> -} else if (Flags & OpenMPDirectiveScope) {
> -  OS << "OpenMPDirectiveScope";
> -  Flags &= ~OpenMPDirectiveScope;
> -} else if (Flags & OpenMPLoopDirectiveScope) {
> -  OS << "OpenMPLoopDirectiveScope";
> -  Flags &= ~OpenMPLoopDirectiveScope;
> -} else if (Flags & OpenMPSimdDirectiveScope) {
> -  OS << "OpenMPSimdDirectiveScope";
> -  Flags &= ~OpenMPSimdDirectiveScope;
> -}
> +  std::pair FlagInfo[] = {
> +  {FnScope, "FnScope"},
> +  {BreakScope, "BreakScope"},
> +  {ContinueScope, "ContinueScope"},
> +  {DeclScope, "DeclScope"},
> +  {ControlScope, "ControlScope"},
> +  {ClassScope, "ClassScope"},
> +  {BlockScope, "BlockScope"},
> +  {TemplateParamScope, "TemplateParamScope"},
> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
> +  {AtCatchScope, "AtCatchScope"},
> +  {ObjCMethodScope, "ObjCMethodScope"},
> +  {SwitchScope, "SwitchScope"},
> +  {TryScope, "TryScope"},
> +  {FnTryCatchScope, "FnTryCatchScope"},
> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
> +  {EnumScope, "EnumScope"},
> +  {SEHTryScope, "SEHTryScope"},
> +  {SEHExceptScope, "SEHExceptScope"},
> +  {SEHFilterScope, "SEHFilterScope"},
> +  {CompoundStmtScope, "CompoundStmtScope"},
> +  {ClassInheritanceScope, "ClassInheritanceScope"}};
>
> -if (Flags)
> -  OS << " | ";
> +  for (auto Info : FlagInfo) {
> +if (Flags & Info.first) {
> +  OS << Info.second;
> +  Flags &= ~Info.first;
> +  if (Flags)
> +OS << " | ";
> +}
>}
> +
> +  assert(Flags == 0 && "Unknown scope flags");
> +
>if (HasFlags)
>  OS << '\n';
>
>
>
> ___
> cfe-commits mailing 

r322813 - Fix Scope::dump()

2018-01-17 Thread Richard Trieu via cfe-commits
Author: rtrieu
Date: Wed Jan 17 20:28:56 2018
New Revision: 322813

URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
Log:
Fix Scope::dump()

The dump function for Scope only has 20 out of the 24 flags.  Since it looped
until no flags were left, having an unknown flag lead to an infinite loop.
That loop has been changed to a single pass for each flag, plus an assert to
alert if new flags are added.

Modified:
cfe/trunk/lib/Sema/Scope.cpp

Modified: cfe/trunk/lib/Sema/Scope.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope.cpp?rev=322813=322812=322813=diff
==
--- cfe/trunk/lib/Sema/Scope.cpp (original)
+++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
@@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
   if (HasFlags)
 OS << "Flags: ";
 
-  while (Flags) {
-if (Flags & FnScope) {
-  OS << "FnScope";
-  Flags &= ~FnScope;
-} else if (Flags & BreakScope) {
-  OS << "BreakScope";
-  Flags &= ~BreakScope;
-} else if (Flags & ContinueScope) {
-  OS << "ContinueScope";
-  Flags &= ~ContinueScope;
-} else if (Flags & DeclScope) {
-  OS << "DeclScope";
-  Flags &= ~DeclScope;
-} else if (Flags & ControlScope) {
-  OS << "ControlScope";
-  Flags &= ~ControlScope;
-} else if (Flags & ClassScope) {
-  OS << "ClassScope";
-  Flags &= ~ClassScope;
-} else if (Flags & BlockScope) {
-  OS << "BlockScope";
-  Flags &= ~BlockScope;
-} else if (Flags & TemplateParamScope) {
-  OS << "TemplateParamScope";
-  Flags &= ~TemplateParamScope;
-} else if (Flags & FunctionPrototypeScope) {
-  OS << "FunctionPrototypeScope";
-  Flags &= ~FunctionPrototypeScope;
-} else if (Flags & FunctionDeclarationScope) {
-  OS << "FunctionDeclarationScope";
-  Flags &= ~FunctionDeclarationScope;
-} else if (Flags & AtCatchScope) {
-  OS << "AtCatchScope";
-  Flags &= ~AtCatchScope;
-} else if (Flags & ObjCMethodScope) {
-  OS << "ObjCMethodScope";
-  Flags &= ~ObjCMethodScope;
-} else if (Flags & SwitchScope) {
-  OS << "SwitchScope";
-  Flags &= ~SwitchScope;
-} else if (Flags & TryScope) {
-  OS << "TryScope";
-  Flags &= ~TryScope;
-} else if (Flags & FnTryCatchScope) {
-  OS << "FnTryCatchScope";
-  Flags &= ~FnTryCatchScope;
-} else if (Flags & SEHTryScope) {
-  OS << "SEHTryScope";
-  Flags &= ~SEHTryScope;
-} else if (Flags & SEHExceptScope) {
-  OS << "SEHExceptScope";
-  Flags &= ~SEHExceptScope;
-} else if (Flags & OpenMPDirectiveScope) {
-  OS << "OpenMPDirectiveScope";
-  Flags &= ~OpenMPDirectiveScope;
-} else if (Flags & OpenMPLoopDirectiveScope) {
-  OS << "OpenMPLoopDirectiveScope";
-  Flags &= ~OpenMPLoopDirectiveScope;
-} else if (Flags & OpenMPSimdDirectiveScope) {
-  OS << "OpenMPSimdDirectiveScope";
-  Flags &= ~OpenMPSimdDirectiveScope;
-}
+  std::pair FlagInfo[] = {
+  {FnScope, "FnScope"},
+  {BreakScope, "BreakScope"},
+  {ContinueScope, "ContinueScope"},
+  {DeclScope, "DeclScope"},
+  {ControlScope, "ControlScope"},
+  {ClassScope, "ClassScope"},
+  {BlockScope, "BlockScope"},
+  {TemplateParamScope, "TemplateParamScope"},
+  {FunctionPrototypeScope, "FunctionPrototypeScope"},
+  {FunctionDeclarationScope, "FunctionDeclarationScope"},
+  {AtCatchScope, "AtCatchScope"},
+  {ObjCMethodScope, "ObjCMethodScope"},
+  {SwitchScope, "SwitchScope"},
+  {TryScope, "TryScope"},
+  {FnTryCatchScope, "FnTryCatchScope"},
+  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
+  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
+  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
+  {EnumScope, "EnumScope"},
+  {SEHTryScope, "SEHTryScope"},
+  {SEHExceptScope, "SEHExceptScope"},
+  {SEHFilterScope, "SEHFilterScope"},
+  {CompoundStmtScope, "CompoundStmtScope"},
+  {ClassInheritanceScope, "ClassInheritanceScope"}};
 
-if (Flags)
-  OS << " | ";
+  for (auto Info : FlagInfo) {
+if (Flags & Info.first) {
+  OS << Info.second;
+  Flags &= ~Info.first;
+  if (Flags)
+OS << " | ";
+}
   }
+
+  assert(Flags == 0 && "Unknown scope flags");
+
   if (HasFlags)
 OS << '\n';
 


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits