URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 305 |
Rev 338 |
// { dg-do run }
|
// { dg-do run }
|
// GROUPS passed conversions
|
// GROUPS passed conversions
|
// cvt file
|
// cvt file
|
// From: krste@icsi.berkeley.edu (Krste Asanovic)
|
// From: krste@icsi.berkeley.edu (Krste Asanovic)
|
// Date: Mon, 24 Aug 92 19:05:10 PDT
|
// Date: Mon, 24 Aug 92 19:05:10 PDT
|
// Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU>
|
// Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU>
|
// Subject: implicit int. convs. from member refs. in switch expressions
|
// Subject: implicit int. convs. from member refs. in switch expressions
|
|
|
#include
|
#include
|
|
|
class A
|
class A
|
{
|
{
|
public:
|
public:
|
A(int j) { i = j; }
|
A(int j) { i = j; }
|
A(A& a) { i = a.i; }
|
A(A& a) { i = a.i; }
|
operator int() { return i; }
|
operator int() { return i; }
|
|
|
void assign(int v) { i = v; }
|
void assign(int v) { i = v; }
|
int i;
|
int i;
|
};
|
};
|
|
|
class B
|
class B
|
{
|
{
|
public:
|
public:
|
B(A& inArg) : in(inArg), out(0) {}
|
B(A& inArg) : in(inArg), out(0) {}
|
|
|
A& in;
|
A& in;
|
A out;
|
A out;
|
|
|
void run();
|
void run();
|
};
|
};
|
|
|
void
|
void
|
B::run()
|
B::run()
|
{
|
{
|
// I get a "switch quantity not an integer" error for this statement.
|
// I get a "switch quantity not an integer" error for this statement.
|
switch (in)
|
switch (in)
|
// Replacing above with "switch (int(in))" removes the error.
|
// Replacing above with "switch (int(in))" removes the error.
|
{
|
{
|
case 0:
|
case 0:
|
out = 1;
|
out = 1;
|
break;
|
break;
|
default:
|
default:
|
out = 0;
|
out = 0;
|
break;
|
break;
|
}
|
}
|
}
|
}
|
|
|
int main()
|
int main()
|
{
|
{
|
A a(1);
|
A a(1);
|
|
|
A& ar = a;
|
A& ar = a;
|
|
|
A& ar2 = ar;
|
A& ar2 = ar;
|
|
|
// ....but no errors for this switch statement.
|
// ....but no errors for this switch statement.
|
switch (ar2)
|
switch (ar2)
|
{
|
{
|
case 1:
|
case 1:
|
std::printf ("PASS\n");
|
std::printf ("PASS\n");
|
break;
|
break;
|
default:
|
default:
|
{ std::printf ("FAIL\n"); return 1; }
|
{ std::printf ("FAIL\n"); return 1; }
|
}
|
}
|
|
|
B b(a);
|
B b(a);
|
a.assign(3);
|
a.assign(3);
|
b.run();
|
b.run();
|
a.assign(0);
|
a.assign(0);
|
b.run();
|
b.run();
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.