OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.dg/] [other/] [abstract1.C] - Diff between revs 301 and 338

Only display areas with differences | Details | Blame | View Log

Rev 301 Rev 338
// { dg-do compile }
// { dg-do compile }
// Contributed by ,
// Contributed by ,
//                ,
//                ,
//                
//                
// c++/9256: Make sure that a pointer to an array of abstract elements
// c++/9256: Make sure that a pointer to an array of abstract elements
//  cannot be created, not even during template substitution (DR337).
//  cannot be created, not even during template substitution (DR337).
struct Abstract { virtual void f() = 0; };  // { dg-message "note" }
struct Abstract { virtual void f() = 0; };  // { dg-message "note" }
struct Complete { void f(); };
struct Complete { void f(); };
/*
/*
 * TEST 1
 * TEST 1
 * Arrays of abstract elements cannot be declared.
 * Arrays of abstract elements cannot be declared.
 */
 */
Abstract a0[2];        // { dg-error "" }
Abstract a0[2];        // { dg-error "" }
Abstract (*a1)[2];     // { dg-error "" }
Abstract (*a1)[2];     // { dg-error "" }
Abstract (**a2)[2];    // { dg-error "" }
Abstract (**a2)[2];    // { dg-error "" }
Abstract (***a3)[2];   // { dg-error "" }
Abstract (***a3)[2];   // { dg-error "" }
Abstract *a4;
Abstract *a4;
Abstract *a5[2];
Abstract *a5[2];
Abstract (*a6[2])[2];  // { dg-error "" }
Abstract (*a6[2])[2];  // { dg-error "" }
Abstract **a7[2];
Abstract **a7[2];
Abstract *(*a8[2])[2];
Abstract *(*a8[2])[2];
Abstract (**a9[2])[2]; // { dg-error "" }
Abstract (**a9[2])[2]; // { dg-error "" }
/*
/*
 * TEST 2
 * TEST 2
 * If a pointer to an array of abstract elements is created during template
 * If a pointer to an array of abstract elements is created during template
 *  instantiation, an error should occur.
 *  instantiation, an error should occur.
 */
 */
template  struct K {
template  struct K {
  T (*a)[2];   // { dg-error "abstract class type" }
  T (*a)[2];   // { dg-error "abstract class type" }
};
};
template struct K;  // { dg-message "instantiated" }
template struct K;  // { dg-message "instantiated" }
/*
/*
 * TEST 3
 * TEST 3
 * Deducing an array of abstract elements during type deduction is a silent
 * Deducing an array of abstract elements during type deduction is a silent
 *  failure (rejects overload).
 *  failure (rejects overload).
 */
 */
template  struct StaticAssert;
template  struct StaticAssert;
template <> struct StaticAssert {};
template <> struct StaticAssert {};
typedef char Yes;
typedef char Yes;
typedef struct { char x[2]; } No;
typedef struct { char x[2]; } No;
template No  is_abstract(U (*k)[1]);
template No  is_abstract(U (*k)[1]);
template Yes is_abstract(...);
template Yes is_abstract(...);
StaticAssert(0)) == sizeof(Yes)> b1;
StaticAssert(0)) == sizeof(Yes)> b1;
StaticAssert(0)) == sizeof(No)> b2;
StaticAssert(0)) == sizeof(No)> b2;
StaticAssert(0)) == sizeof(No)> b3;
StaticAssert(0)) == sizeof(No)> b3;
 
 

powered by: WebSVN 2.1.0

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