[cfe-dev] Is this a clang bug? "Foo::Foo::bar"

Richard Smith richard at metafoo.co.uk
Tue Jul 16 13:51:22 PDT 2013


On Tue, Jul 16, 2013 at 1:15 PM, Tomasz Mikolajczyk <tmmikolajczyk at gmail.com
> wrote:

> FYI, I submitted such issue some time ago:
> http://llvm.org/bugs/show_bug.cgi?id=14100
>
> It has been rejected as invalid at that time.
>

Oh, my bad, I should have looked at the example in this mail thread more
closely. PR14100 is invalid, and the original code in this thread is valid.


> Regards,
> Tomek
>
>
> On Tue, Jul 16, 2013 at 9:14 PM, Mehdi AMINI <mehdi.amini at silkan.com>wrote:
>
>> Hi,
>>
>> I tried to understand the PR15243 and I read the core issue 1310* but the
>> examples given in both the ticket and the description with resolution 1310
>> focus on the lookup of a class constructor and not a member function, like
>> the example given by Jonathan. How is it applicable here, it seems to me
>> that there is no ambiguity about the fact that "Foo" cannot be the
>> constructor in "Foo::Foo::bar"?
>>
>
You're right, in this case, Foo::Foo::bar is valid. But it's not a question
of ambiguity -- per DR1310, Foo::Foo names the constructor in all cases
except:
  * before "::",
  * after "struct", "class" or "union", or
  * in a class definition's base specifier list
... even if that makes the program ill-formed. This is the part that Clang
doesn't implement correctly (and is the subject of PR15243).

Thanks,
>>
>> Mehdi
>>
>> *http://www.open-std.org/jtc1/**sc22/wg21/docs/cwg_defects.**html<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html>
>>
>> On 7/16/13 11:39 AM, Richard Smith wrote:
>>
>>> That's a bug: llvm.org/PR15243 <http://llvm.org/PR15243>
>>>
>>>
>>> The standard wording used to be ambiguous here, the resolution chosen by
>>> the committee didn't match clang's interpretation of the ambiguity, and
>>> no-one has gotten around to fixing it yet. Patches would be welcome ;-)
>>>
>>> On Tue, Jul 16, 2013 at 6:35 AM, Jonathan Sauer <jonathan.sauer at gmx.de
>>> <mailto:jonathan.sauer at gmx.de>**> wrote:
>>>
>>>     Hello,
>>>
>>>     the following program compiles with clang r186311, and I'm not sure
>>>     if this is a bug
>>>     or correct behavior:
>>>
>>>     struct Foo {
>>>          void bar();
>>>     };
>>>
>>>
>>>     void Foo::Foo::Foo::Foo::Foo::Foo::**bar()
>>>     {
>>>     }
>>>
>>>
>>>     According to §3.3.7p1 bullet 5 (basic.scope.class), the potential
>>>     scope of a class
>>>     includes "the regions defined by its member definitions [...]
>>>     including the member
>>>     function body and any portion of the declarator part of such
>>>     definitions which follows
>>>     the declarator-id", and §3.4.3.1p1 (class.qual) states that "A class
>>>     member can be
>>>     referred to using a qualified-id at any point in its potential
>>>     scope" while "the name
>>>     [specified after the nested-name-specifier] shall represent one or
>>>     more members of
>>>     that class or of one of its base classes."
>>>
>>>     However in the code above the member function "bar" is referred to
>>>     using a qualified-id
>>>     in its declarator-id, which is not part of the class' potential
>>>     scope, and "Foo" isn't
>>>     a base class of itself, so this shouldn't be allowed.
>>>
>>>     Still, I'm not sure if I got all the subtleties of C++'s name lookup
>>>     rules right, so
>>>     I'd like to make sure if this is a bug in clang or merely the
>>>     somewhat amusing result
>>>     of the way names in C++ can be specified.
>>>
>>>
>>>     With many thanks in advance,
>>>     Jonathan
>>>
>>>
>>>     ______________________________**_________________
>>>     cfe-dev mailing list
>>>     cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
>>>     http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>>
>>>
>>>
>>>
>>>
>>> ______________________________**_________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>>
>>>
>>
>> ______________________________**_________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130716/9e19f6cc/attachment.html>


More information about the cfe-dev mailing list