This is the mail archive of the 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 4.0] Fix PR18681 (access checking for typedeftypes) Part 1 or 2

Mark Mitchell wrote:

Unfortunately, C++ requires both that (a) we resolve qualification in templates when parsing things that are non-dependent, and (b) that we preserve the qualification until instantiation time to check access. I think that the only solution to this is, ultimately, to keep a list of (dependent) things that must be checked at instantiation time, even after resolving dependencies.

Yes, I have this idea of a list of qualified-id we need to check access planned for PR16617. That list would be a new field in lang_specific of RECORD_TYPE (class template), FUNCTION_DECL (function template or member function of class template), VAR_DECL, etc. It will contain non-dependent TYPENAME_TYPE, UNBOUND_CLASS_TEMPLATE, and many of SCOPE_REF nodes.

At present, I've taken the approach that we resolve the dependent names, as required for correctness of valid code, and that if we miss some access checking, oh, well, that only affects invalid code. However, it seems like you've found a case where that approach isn't working.

We can have the same list for TYPE_DECL for the typedef but also
containing dependent qualified-id.  So for code like:

typedef D<T::X, XX> DD;

T::X is in the list but XX isn't.  But I prefer to have some way to
mark T::X and XX differently though.


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