blob: d9e77ba2d3bd83992030271062088ce6bf49f50c [file] [log] [blame]
// PR c++/84993
// { dg-options "-fdiagnostics-show-caret" }
/* Misspelling (by omitting a leading "m_") of a private member for which
there's a public accessor.
We expect a fix-it hint suggesting the accessor. */
class t1
{
public:
int get_ratio () const { return m_ratio; }
private:
int m_ratio;
};
int test (t1 *ptr_1)
{
return ptr_1->ratio; // { dg-error "'class t1' has no member named 'ratio'; did you mean 'int t1::m_ratio'\\? \\(accessible via 'int t1::get_ratio\\(\\) const'\\)" }
/* { dg-begin-multiline-output "" }
return ptr_1->ratio;
^~~~~
get_ratio()
{ dg-end-multiline-output "" } */
}
/* Misspelling of a private member for which there's a public accessor.
We expect a fix-it hint suggesting the accessor. */
class t2
{
public:
int get_color () const { return m_color; }
private:
int m_color;
};
int test (t2 *ptr_2)
{
return ptr_2->m_colour; // { dg-error "'class t2' has no member named 'm_colour'; did you mean 'int t2::m_color'\\? \\(accessible via 'int t2::get_color\\(\\) const'\\)" }
/* { dg-begin-multiline-output "" }
return ptr_2->m_colour;
^~~~~~~~
get_color()
{ dg-end-multiline-output "" } */
}
/* Misspelling of a private member via a subclass pointer, for which there's
a public accessor in the base class.
We expect a fix-it hint suggesting the accessor. */
class t3 : public t2 {};
int test (t3 *ptr_3)
{
return ptr_3->m_colour; // { dg-error "'class t3' has no member named 'm_colour'; did you mean 'int t2::m_color'\\? \\(accessible via 'int t2::get_color\\(\\) const'\\)" }
/* { dg-begin-multiline-output "" }
return ptr_3->m_colour;
^~~~~~~~
get_color()
{ dg-end-multiline-output "" } */
}
/* Misspelling of a protected member, for which there's isn't a public
accessor.
We expect no fix-it hint; instead a message identifying where the
data member was declared. */
class t4
{
protected:
int m_color; // { dg-message "declared protected here" }
};
int test (t4 *ptr_4)
{
return ptr_4->m_colour; // { dg-error "'class t4' has no member named 'm_colour'; did you mean 'int t4::m_color'\\? \\(not accessible from this context\\)" }
/* { dg-begin-multiline-output "" }
return ptr_4->m_colour;
^~~~~~~~
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
int m_color;
^~~~~~~
{ dg-end-multiline-output "" } */
}
/* Misspelling of a private member, for which the accessor is also private.
We expect no fix-it hint; instead a message identifying where the
data member was declared. */
class t5
{
int get_color () const { return m_color; }
int m_color; // { dg-message "declared private here" }
};
int test (t5 *ptr_5)
{
return ptr_5->m_colour; // { dg-error "'class t5' has no member named 'm_colour'; did you mean 'int t5::m_color'\\? \\(not accessible from this context\\)" }
/* { dg-begin-multiline-output "" }
return ptr_5->m_colour;
^~~~~~~~
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
int m_color;
^~~~~~~
{ dg-end-multiline-output "" } */
}