This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ PATCH for c++/44587 (qualified-ids as template arguments)


On Tue, Jun 29, 2010 at 12:24 PM, Jason Merrill <jason@redhat.com> wrote:
> In 44587, using a qualified-id naming an array static data member as a
> pointer template argument was causing an ICE. ?When I investigated this, it
> turned out that we weren't doing anything about 14.6.2.4/3:
>
> A non-integral non-type template-argument is dependent if its type is
> dependent or it has either of the following forms
> ? ? ? ?qualified-id
> ? ? ? ?& qualified-id
>
> which is somewhat odd because this text was there in C++98.
>
> Then I noticed that the equivalent testcase using an unqualified-id was
> being miscompiled as well--and that it seems to be a hole in the standard,
> as the address of a static data member is clearly value-dependent, but the
> standard doesn't say that.
>
> These testcases worked in 4.2, but started going wrong in 4.3.
>
> So, this patch clarifies that such an address is value-dependent, makes sure
> that we check that before deciding to fold it, and treats a qualified-id
> that names a member of the current instantiation the same as an
> unqualified-id to avoid crashing in lvalue_p.
>
> Tested x86_64-pc-linux-gnu, applying to 4.4, 4.5 and trunk.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46058


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]