[LLVMbugs] [Bug 6825] New: Missing access control check for injected-class-names used as template-names
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon Apr 12 15:48:34 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=6825
Summary: Missing access control check for injected-class-names
used as template-names
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: dgregor at apple.com
CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com
We aren't performing access control for injected-class-names that are used as
template names, e.g.,
terfin:clang dgregor$ cat t3.C
template <class T> struct Base { };
template<typename T> class Between : private Base<T> { };
template <class T> struct Derived : private Between<int>, private Between<char>
{
Base<double> d;
};
Derived<double> dd;
terfin:clang dgregor$ clang++ -fsyntax-only t3.C
terfin:clang dgregor$ eccp -A t3.C
"t3.C", line 6: error: type "Base<T>::Base [with T=int]" (declared at line 1)
is inaccessible
Base<double> d;
^
detected during instantiation of class "Derived<T> [with T=double]"
at line 9
1 error detected in the compilation of "t3.C".
The solution is not trivial, because we are performing some ambiguity
resolution (per C++ [temp.local]p4) when the injected-class-names are mapped to
class templates, so we will need to hold on to all of the paths to each of the
injected-class-names; some of those paths may not be accessible while others
are.
GCC doesn't diagnose this example, nor does EDG in non-strict mode, so it's not
critical.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list