FYI, I reverted this in r153768.

Matt is working on a beautiful reduction of an actual miscompile this
causes.

On Fri, Mar 30, 2012 at 12:37 PM, Richard Smith <[email protected]>wrote:

> On Fri, Mar 30, 2012 at 12:33 PM, Matthieu Monrocq <
> [email protected]> wrote:
>
>>
>>
>> Le 30 mars 2012 20:41, Chandler Carruth <[email protected]> a écrit :
>>
>> On Fri, Mar 30, 2012 at 1:06 AM, Richard Smith <[email protected]>wrote:
>>>
>>>> Repro looks like this:
>>>>
>>>> extern "C" {
>>>>   void f() { static int n = 1; }
>>>>   void g() { static long long n = 2; }
>>>> }
>>>>
>>>> The root cause seems to be that we don't mangle static locals inside an
>>>> extern "C" block. (For reference, g++ does.)
>>>>
>>>
>>> This is causing pretty significant regressions for us. Is a fix in the
>>> works? If not, I'd like to revert until we get a fix in place so that we
>>> can make forward progress, and track down other bugs currently showing up.
>>>
>>>
>>>
>> It has been reported on the mainling list that:
>>
>> int main(int argc, char*[]) {
>>   switch(argc) {
>>   case 0: { const int s[] = {0}; break; }
>>   case 1: { const int s[] = {1, 2}; break; }
>>   }
>>   return 0;
>> }
>>
>> was now broken, could it be due to this too ?
>>
>
> Yes, this is the same issue. We're merging the globals which are
> implicitly created to hold the constant values of the 's' variables.
>
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to