[cfe-dev] MS/Borland portability and 2-phase lookup

Eric Niebler eric at boostpro.com
Sun Mar 6 20:45:15 PST 2011


On 3/5/2011 2:47 PM, Francois Pichet wrote:
> On Fri, Mar 4, 2011 at 3:08 AM, Eric Niebler <eric at boostpro.com> wrote:
>> We have a portability problem compiling old code for MS/Borland with
>> clang: 2-phase lookup. Those compilers don't do it, so they accept code
>> that clang rejects. For example:
>>
>> template<class X>
>> struct S {
>>  int i;
>> };
>>
>> template<class Y>
>> struct T {
>>  T() {
>>    i = 0; // ERROR, should be T::i or this->i
>>  }
>> };
>>
>> Clang correctly diagnoses this problem, which presents a problem for old
>> broken code that compiles OK with MS and Borland. This problem appears
>> to be quite widespread.
>>
>> Would there be any interest in a patch that turns off 2-phase lookup
>> when in MS/Borland compatibility mode
>> (-fms-extensions/-fborland-extensions)? If so, I can see about providing
>> one.
>>
> 
> Hi, I am very close to submit a patch that will dramatically improve
> clang -fms-extensions mode handling of microsoft template.
> 
> What the patch does (suggested by Doug Gregor on the IRC channel) is
> to simply skip parsing of template function code, lex and save the
> tokens and then at the end of the translation unit do the actual
> parsing with all the information of the translation unit available
> (similar to the way inline functions parsing is postponed to the end
> of the class definition)
> 
> This solves the vast majority of errors when parsing the Microsoft
> template headers with clang.
> Actually this evening, I was even able to self-host clang (on darwin)
> with this mechanism.

Awesome! This sounds great, Francois. I encourage you to continue ...
this is valuable work.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 551 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110307/023c02d0/attachment.sig>


More information about the cfe-dev mailing list