OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.law/] [cvt7.C] - Diff between revs 305 and 338

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;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.