On Fri, Dec 5, 2014 at 12:37 PM, Nico Weber <[email protected]> wrote:
> On Fri, Dec 5, 2014 at 11:55 AM, David Majnemer <[email protected]> > wrote: > >> >> >> On Fri, Dec 5, 2014 at 11:47 AM, Nico Weber <[email protected]> wrote: >> >>> On Fri, Dec 5, 2014 at 11:41 AM, David Majnemer < >>> [email protected]> wrote: >>> >>>> >>>> >>>> On Fri, Dec 5, 2014 at 11:25 AM, Nico Weber <[email protected]> >>>> wrote: >>>> >>>>> On Fri, Dec 5, 2014 at 12:56 AM, David Majnemer < >>>>> [email protected]> wrote: >>>>> >>>>>> Author: majnemer >>>>>> Date: Fri Dec 5 02:56:55 2014 >>>>>> New Revision: 223455 >>>>>> >>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=223455&view=rev >>>>>> Log: >>>>>> Driver: Objective-C should respect -fno-exceptions >>>>>> >>>>>> Clang attempted to replicate a GCC bug: -fobjc-exceptions forces >>>>>> -fexceptions to be enabled. However, this has unintended effects and >>>>>> other awkard side effects that Clang doesn't "correctly" ape (e.g. >>>>>> it's >>>>>> impossible to turn off C++ exceptions in ObjC++ mode >>>>> >>>>> >>>>> What does "impossible to turn off exceptions" mean here? >>>>> >>>>> $ clang -c test.mm -fno-exceptions >>>>> test.mm:2:3: error: cannot use 'try' with exceptions disabled >>>>> try {} catch (...) {} >>>>> ^ >>>>> 1 error generated. >>>>> >>>> >>>> You should try that with GCC, not clang :) >>>> >>>> >>>>> >>>>> ). >>>>>> >>>>>> Instead, -f[no]objc-exceptions and -f[no]cxx-exceptions now have an >>>>>> identical relationship with -f[no]exceptions. >>>>>> >>>>> >>>>> Did anyone from Apple review this? I thought the intention was that >>>>> -fno-exceptions disables c++ exceptions but keeps objc exceptions enabled, >>>>> since a) many people don't want c++ exceptions so they use -fno-exceptions >>>>> but b) cocoa uses exceptions so you can't really build without objc >>>>> exceptions. >>>>> >>>>> (I'm guessing I'm misunderstanding the patch somehow.) >>>>> >>>> >>>> The original code was trying to mimic GCC's behavior where >>>> -fobjc-exceptions _ignores_ -fno-exceptions. >>>> In GCC, this means that ObjC++ code cannot _ever_ opt out of C++ >>>> exceptions because they don't have a -fcxx-exceptions, they just have >>>> -fexceptions. Clang has a different dichotomy of exception >>>> enabling/disabling flags and it doesn't make sense to copy GCC's arbitrary >>>> behavior. >>>> >>>> If you want Objective-C exceptions but not C++ exceptions, >>>> -fobjc-exceptions -fno-cxx-exceptions should do the trick. >>>> >>> >>> I'm somewhat sure that when these flags got added they were explicitly >>> put in a state where -fno-exceptions disables c++ exceptions but not objc >>> exceptions, for the reason I mentioned above. I don't remember anything >>> about gcc compatibility. >>> >> >> >> http://llvm.org/klaus/clang/commit/d47ea693706f7b0ffa68e879b73a71609a337786/ >> >> "Be compatible with GCC behavior in that -fno-exceptions *does not* >> disable Obj-C exceptions." >> "This is not necessarily sensible, but follows GCC." >> >> >>> >>> Most software doesn't use Objective-C, and when folks say >>> -fno-exceptions they mean "no c++ exceptions". >>> >> >> Sure, but that's not what -fno-exceptions does in GCC. >> >> In C, it disables -fexceptions; this will ensure that calls to >> __gcc_personality_v0 will not occur. It also changes the behavior of >> __attribute__((cleanup)). >> In Objective C, it does nothing. >> In C++, it disables -fexceptions; this will ensure that calls to >> __gxx_personality_v0 will not occur. It makes it illegal to mention 'try' >> and 'catch'. >> In Objective C++, it does nothing. >> > > What gcc does for Objective-C nowadays doesn't matter much, almost > everyone building Objective-C code uses clang. The gcc behavior is > nonsensical, clang's previous behavior wasn't. > > This commit changes behavior fairly severely, without much of a motivation > from what I understand. > > I think clang's previous behavior makes a lot of sense: You have > -fno-exceptions in all your build files, and you want that to disable c++ > exceptions on linux. You want the same flag mean the same thing on OS X in > .mm files. If you're writing regular mac apps, you can't realistically > disable objc exceptions as some framework apis use them. > > Having said that, from what I can tell this commit doesn't help with what > I think it was supposed to help with: > > $ ~/src/llvm-build/bin/clang -fno-exceptions -fobjc-exceptions > -fno-cxx-exceptions -E -dM -x objective-c++ /dev/null | grep EXCEP > #define OBJC_ZEROCOST_EXCEPTIONS 1 > #define __EXCEPTIONS 1 > The only thing __EXCEPTIONS really *reliably* corresponds to whether or not __attribute__((cleanup)) does special stuff if an exception is thrown. Why? Because __EXCEPTIONS *must* be set to 1 in 'C' mode if -fexceptions is enabled. -fobjc-exceptions enables this functionality in clang and gcc, both before *and* after my change. The best way to determine if C++ exceptions are available is __has_feature(cxx_exceptions). > > >> >>> >>> >>>> >>>> >>>>> >>>>>> >>>>>> Added: >>>>>> cfe/trunk/test/Driver/exceptions.mm >>>>>> Removed: >>>>>> cfe/trunk/test/Driver/exceptions.m >>>>>> Modified: >>>>>> cfe/trunk/lib/Driver/Tools.cpp >>>>>> cfe/trunk/test/Driver/rewrite-legacy-objc.m >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=223455&r1=223454&r2=223455&view=diff >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Dec 5 02:56:55 2014 >>>>>> @@ -1894,23 +1894,6 @@ static void getTargetFeatures(const Driv >>>>>> } >>>>>> } >>>>>> >>>>>> -static bool >>>>>> -shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime &runtime, >>>>>> - const llvm::Triple >>>>>> &Triple) { >>>>>> - // We use the zero-cost exception tables for Objective-C if the >>>>>> non-fragile >>>>>> - // ABI is enabled or when compiling for x86_64 and ARM on Snow >>>>>> Leopard and >>>>>> - // later. >>>>>> - if (runtime.isNonFragile()) >>>>>> - return true; >>>>>> - >>>>>> - if (!Triple.isMacOSX()) >>>>>> - return false; >>>>>> - >>>>>> - return (!Triple.isMacOSXVersionLT(10,5) && >>>>>> - (Triple.getArch() == llvm::Triple::x86_64 || >>>>>> - Triple.getArch() == llvm::Triple::arm)); >>>>>> -} >>>>>> - >>>>>> // exceptionSettings() exists to share the logic between -cc1 and >>>>>> linker >>>>>> // invocations. >>>>>> static bool exceptionSettings(const ArgList &Args, const >>>>>> llvm::Triple &Triple) { >>>>>> @@ -1947,15 +1930,21 @@ static void addExceptionArgs(const ArgLi >>>>>> // Gather the exception settings from the command line arguments. >>>>>> bool EH = exceptionSettings(Args, Triple); >>>>>> >>>>>> - // Obj-C exceptions are enabled by default, regardless of >>>>>> -fexceptions. This >>>>>> - // is not necessarily sensible, but follows GCC. >>>>>> - if (types::isObjC(InputType) && >>>>>> - Args.hasFlag(options::OPT_fobjc_exceptions, >>>>>> - options::OPT_fno_objc_exceptions, >>>>>> - true)) { >>>>>> - CmdArgs.push_back("-fobjc-exceptions"); >>>>>> + if (types::isObjC(InputType)) { >>>>>> + bool ObjCExceptionsEnabled = true; >>>>>> + if (Arg *A = Args.getLastArg(options::OPT_fobjc_exceptions, >>>>>> + options::OPT_fno_objc_exceptions, >>>>>> + options::OPT_fexceptions, >>>>>> + options::OPT_fno_exceptions)) >>>>>> + ObjCExceptionsEnabled = >>>>>> + A->getOption().matches(options::OPT_fobjc_exceptions) || >>>>>> + A->getOption().matches(options::OPT_fexceptions); >>>>>> + >>>>>> + if (ObjCExceptionsEnabled) { >>>>>> + CmdArgs.push_back("-fobjc-exceptions"); >>>>>> >>>>>> - EH |= shouldUseExceptionTablesForObjCExceptions(objcRuntime, >>>>>> Triple); >>>>>> + EH = true; >>>>>> + } >>>>>> } >>>>>> >>>>>> if (types::isCXX(InputType)) { >>>>>> >>>>>> Removed: cfe/trunk/test/Driver/exceptions.m >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.m?rev=223454&view=auto >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/exceptions.m (original) >>>>>> +++ cfe/trunk/test/Driver/exceptions.m (removed) >>>>>> @@ -1,19 +0,0 @@ >>>>>> -// RUN: %clang -target x86_64-apple-darwin9 \ >>>>>> -// RUN: -fsyntax-only -fno-exceptions %s >>>>>> - >>>>>> -void f1() { >>>>>> - @throw @"A"; >>>>>> -} >>>>>> - >>>>>> -void f0() { >>>>>> - @try { >>>>>> - f1(); >>>>>> - } @catch (id x) { >>>>>> - ; >>>>>> - } >>>>>> -} >>>>>> - >>>>>> -int main() { >>>>>> - f0(); >>>>>> - return 0; >>>>>> -} >>>>>> >>>>>> Added: cfe/trunk/test/Driver/exceptions.mm >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.mm?rev=223455&view=auto >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/exceptions.mm (added) >>>>>> +++ cfe/trunk/test/Driver/exceptions.mm Fri Dec 5 02:56:55 2014 >>>>>> @@ -0,0 +1,6 @@ >>>>>> +// RUN: %clang -target x86_64-apple-darwin11 -fno-exceptions %s -o - >>>>>> -### 2>&1 | \ >>>>>> +// RUN: FileCheck %s >>>>>> + >>>>>> +CHECK-NOT: "-fobjc-exceptions" >>>>>> +CHECK-NOT: "-fcxx-exceptions" >>>>>> +CHECK-NOT: "-fexceptions" >>>>>> >>>>>> Modified: cfe/trunk/test/Driver/rewrite-legacy-objc.m >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rewrite-legacy-objc.m?rev=223455&r1=223454&r2=223455&view=diff >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/rewrite-legacy-objc.m (original) >>>>>> +++ cfe/trunk/test/Driver/rewrite-legacy-objc.m Fri Dec 5 02:56:55 >>>>>> 2014 >>>>>> @@ -9,5 +9,5 @@ >>>>>> // RUN: FileCheck -check-prefix=TEST1 %s >>>>>> // RUN: %clang -no-canonical-prefixes -target >>>>>> i386-apple-macosx10.6.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \ >>>>>> // RUN: FileCheck -check-prefix=TEST2 %s >>>>>> -// TEST1: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" >>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" >>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> -// TEST2: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" >>>>>> "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> +// TEST1: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" >>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" >>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> +// TEST2: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" >>>>>> "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" >>>>>> "-fdiagnostics-show-option" >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> cfe-commits mailing list >>>>>> [email protected] >>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>>>> >>>>> >>>>> >>>> >>>> On Fri, Dec 5, 2014 at 11:25 AM, Nico Weber <[email protected]> >>>> wrote: >>>> >>>>> On Fri, Dec 5, 2014 at 12:56 AM, David Majnemer < >>>>> [email protected]> wrote: >>>>> >>>>>> Author: majnemer >>>>>> Date: Fri Dec 5 02:56:55 2014 >>>>>> New Revision: 223455 >>>>>> >>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=223455&view=rev >>>>>> Log: >>>>>> Driver: Objective-C should respect -fno-exceptions >>>>>> >>>>>> Clang attempted to replicate a GCC bug: -fobjc-exceptions forces >>>>>> -fexceptions to be enabled. However, this has unintended effects and >>>>>> other awkard side effects that Clang doesn't "correctly" ape (e.g. >>>>>> it's >>>>>> impossible to turn off C++ exceptions in ObjC++ mode >>>>> >>>>> >>>>> What does "impossible to turn off exceptions" mean here? >>>>> >>>>> $ clang -c test.mm -fno-exceptions >>>>> test.mm:2:3: error: cannot use 'try' with exceptions disabled >>>>> try {} catch (...) {} >>>>> ^ >>>>> 1 error generated. >>>>> >>>>> ). >>>>>> >>>>>> Instead, -f[no]objc-exceptions and -f[no]cxx-exceptions now have an >>>>>> identical relationship with -f[no]exceptions. >>>>>> >>>>> >>>>> Did anyone from Apple review this? I thought the intention was that >>>>> -fno-exceptions disables c++ exceptions but keeps objc exceptions enabled, >>>>> since a) many people don't want c++ exceptions so they use -fno-exceptions >>>>> but b) cocoa uses exceptions so you can't really build without objc >>>>> exceptions. >>>>> >>>>> (I'm guessing I'm misunderstanding the patch somehow.) >>>>> >>>>> >>>>>> >>>>>> Added: >>>>>> cfe/trunk/test/Driver/exceptions.mm >>>>>> Removed: >>>>>> cfe/trunk/test/Driver/exceptions.m >>>>>> Modified: >>>>>> cfe/trunk/lib/Driver/Tools.cpp >>>>>> cfe/trunk/test/Driver/rewrite-legacy-objc.m >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=223455&r1=223454&r2=223455&view=diff >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Dec 5 02:56:55 2014 >>>>>> @@ -1894,23 +1894,6 @@ static void getTargetFeatures(const Driv >>>>>> } >>>>>> } >>>>>> >>>>>> -static bool >>>>>> -shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime &runtime, >>>>>> - const llvm::Triple >>>>>> &Triple) { >>>>>> - // We use the zero-cost exception tables for Objective-C if the >>>>>> non-fragile >>>>>> - // ABI is enabled or when compiling for x86_64 and ARM on Snow >>>>>> Leopard and >>>>>> - // later. >>>>>> - if (runtime.isNonFragile()) >>>>>> - return true; >>>>>> - >>>>>> - if (!Triple.isMacOSX()) >>>>>> - return false; >>>>>> - >>>>>> - return (!Triple.isMacOSXVersionLT(10,5) && >>>>>> - (Triple.getArch() == llvm::Triple::x86_64 || >>>>>> - Triple.getArch() == llvm::Triple::arm)); >>>>>> -} >>>>>> - >>>>>> // exceptionSettings() exists to share the logic between -cc1 and >>>>>> linker >>>>>> // invocations. >>>>>> static bool exceptionSettings(const ArgList &Args, const >>>>>> llvm::Triple &Triple) { >>>>>> @@ -1947,15 +1930,21 @@ static void addExceptionArgs(const ArgLi >>>>>> // Gather the exception settings from the command line arguments. >>>>>> bool EH = exceptionSettings(Args, Triple); >>>>>> >>>>>> - // Obj-C exceptions are enabled by default, regardless of >>>>>> -fexceptions. This >>>>>> - // is not necessarily sensible, but follows GCC. >>>>>> - if (types::isObjC(InputType) && >>>>>> - Args.hasFlag(options::OPT_fobjc_exceptions, >>>>>> - options::OPT_fno_objc_exceptions, >>>>>> - true)) { >>>>>> - CmdArgs.push_back("-fobjc-exceptions"); >>>>>> + if (types::isObjC(InputType)) { >>>>>> + bool ObjCExceptionsEnabled = true; >>>>>> + if (Arg *A = Args.getLastArg(options::OPT_fobjc_exceptions, >>>>>> + options::OPT_fno_objc_exceptions, >>>>>> + options::OPT_fexceptions, >>>>>> + options::OPT_fno_exceptions)) >>>>>> + ObjCExceptionsEnabled = >>>>>> + A->getOption().matches(options::OPT_fobjc_exceptions) || >>>>>> + A->getOption().matches(options::OPT_fexceptions); >>>>>> + >>>>>> + if (ObjCExceptionsEnabled) { >>>>>> + CmdArgs.push_back("-fobjc-exceptions"); >>>>>> >>>>>> - EH |= shouldUseExceptionTablesForObjCExceptions(objcRuntime, >>>>>> Triple); >>>>>> + EH = true; >>>>>> + } >>>>>> } >>>>>> >>>>>> if (types::isCXX(InputType)) { >>>>>> >>>>>> Removed: cfe/trunk/test/Driver/exceptions.m >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.m?rev=223454&view=auto >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/exceptions.m (original) >>>>>> +++ cfe/trunk/test/Driver/exceptions.m (removed) >>>>>> @@ -1,19 +0,0 @@ >>>>>> -// RUN: %clang -target x86_64-apple-darwin9 \ >>>>>> -// RUN: -fsyntax-only -fno-exceptions %s >>>>>> - >>>>>> -void f1() { >>>>>> - @throw @"A"; >>>>>> -} >>>>>> - >>>>>> -void f0() { >>>>>> - @try { >>>>>> - f1(); >>>>>> - } @catch (id x) { >>>>>> - ; >>>>>> - } >>>>>> -} >>>>>> - >>>>>> -int main() { >>>>>> - f0(); >>>>>> - return 0; >>>>>> -} >>>>>> >>>>>> Added: cfe/trunk/test/Driver/exceptions.mm >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.mm?rev=223455&view=auto >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/exceptions.mm (added) >>>>>> +++ cfe/trunk/test/Driver/exceptions.mm Fri Dec 5 02:56:55 2014 >>>>>> @@ -0,0 +1,6 @@ >>>>>> +// RUN: %clang -target x86_64-apple-darwin11 -fno-exceptions %s -o - >>>>>> -### 2>&1 | \ >>>>>> +// RUN: FileCheck %s >>>>>> + >>>>>> +CHECK-NOT: "-fobjc-exceptions" >>>>>> +CHECK-NOT: "-fcxx-exceptions" >>>>>> +CHECK-NOT: "-fexceptions" >>>>>> >>>>>> Modified: cfe/trunk/test/Driver/rewrite-legacy-objc.m >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rewrite-legacy-objc.m?rev=223455&r1=223454&r2=223455&view=diff >>>>>> >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/rewrite-legacy-objc.m (original) >>>>>> +++ cfe/trunk/test/Driver/rewrite-legacy-objc.m Fri Dec 5 02:56:55 >>>>>> 2014 >>>>>> @@ -9,5 +9,5 @@ >>>>>> // RUN: FileCheck -check-prefix=TEST1 %s >>>>>> // RUN: %clang -no-canonical-prefixes -target >>>>>> i386-apple-macosx10.6.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \ >>>>>> // RUN: FileCheck -check-prefix=TEST2 %s >>>>>> -// TEST1: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" >>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" >>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> -// TEST2: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" >>>>>> "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> +// TEST1: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature" >>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" >>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option" >>>>>> +// TEST2: "-fmessage-length" "0" "-stack-protector" "1" >>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile" >>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type" >>>>>> "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16" >>>>>> "-fdiagnostics-show-option" >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> cfe-commits mailing list >>>>>> [email protected] >>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>>>> >>>>> >>>>> >>>> >>> >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
