X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Ftestsuite%2Fg%2B%2B.old-deja%2Fg%2B%2B.bugs%2F900428_01.C;fp=gcc%2Ftestsuite%2Fg%2B%2B.old-deja%2Fg%2B%2B.bugs%2F900428_01.C;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=ecbda0c5167ec5705fb1989db2985497073ab059;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C deleted file mode 100644 index ecbda0c5..00000000 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C +++ /dev/null @@ -1,164 +0,0 @@ -// g++ 1.37.1 bug 900428_01 - -// g++ fails to issue error messages for cases where an incomplete type -// object must be evaluated if the value of such an evaluation is not -// actually used in the given context. - -// In the case where such an object is volatile, it is obvious that this -// could be a problem, however I believe that errors should be issued -// for such cases regardless of whether or not such values are volatile -// because the abstract semantics seem to require the evaluation of such -// values whether they are volatile or not. - -// [expr.static.cast/4, stmt.expr/1, expr.comma/1] show that expressions do -// not under go lvalue to rvalue decay, unless the value is actually used. -// This can be surprising when the object is volatile. We interpret a -// dereference of pointer to volatile to be a read. - -// keywords: incomplete types, evaluation, volatile qualifier -// Build don't link: - -int *ip_fn (); -int &ir_fn (); -volatile int *vip_fn (); -volatile int &vir_fn (); - -void int_test (int i, int *p, volatile int *vp, int &r, volatile int &vr) -{ - int j; - volatile int vj; - - *p; // ok, no warning - (void)*p; // ok, no warning - (void)(i ? j : *p); // ok, no warning - (void)(i ? *p : j); // ok, no warning - (void)((void)1, *p); // ok, no warning - - *vp; // ok, no warning - (void)*vp; // ok, no warning - (void)(i ? vj : *vp); // ok, no warning - (void)(i ? *vp : vj); // ok, no warning - (void)((void)1, *vp); // ok, no warning - - r; // ok, no warning - (void)r; // ok, no warning - (void)(i ? j : r); // ok, no warning - (void)(i ? r : j); // ok, no warning - (void)((void)1, r); // ok, no warning - - vr; // WARNING - reference not accessed - (void)vr; // WARNING - reference not accessed - (void)(i ? vj : vr); // WARNING - reference not accessed - (void)(i ? vr : vj); // WARNING - reference not accessed - (void)((void)1, vr); // WARNING - reference not accessed - - *ip_fn (); // ok, no warning - *vip_fn (); // ok, no warning - ir_fn (); // ok, no warning - vir_fn (); // WARNING - reference not accessed -} - -struct S; -S *sp_fn (); -S &sr_fn (); -volatile S *vsp_fn (); -volatile S &vsr_fn (); - -void incomplete_test (int i, S *p, volatile S *vp, S &r, volatile S &vr) -{ - extern S j; - extern volatile S vj; - - *p; // ok, no warning - (void)*p; // ok, no warning - (void)(i ? j : *p); // ok, no warning - (void)(i ? *p : j); // ok, no warning - (void)((void)1, *p); // ok, no warning - - *vp; // WARNING - incomplete not accessed - (void)*vp; // WARNING - incomplete not accessed - (void)(i ? vj : *vp); // WARNING - incomplete not accessed - (void)(i ? *vp : vj); // WARNING - incomplete not accessed - (void)((void)1, *vp); // WARNING - incomplete not accessed - - r; // ok, no warning - (void)r; // ok, no warning - (void)(i ? j : r); // ok, no warning - (void)(i ? r : j); // ok, no warning - (void)((void)1, r); // ok, no warning - - vr; // WARNING - reference not accessed - (void)vr; // WARNING - reference not accessed - (void)(i ? vj : vr); // WARNING - reference not accessed - (void)(i ? vr : vj); // WARNING - reference not accessed - (void)((void)1, vr); // WARNING - reference not accessed - - *sp_fn (); // ok, no warning - *vsp_fn (); // WARNING - incomplete not accessed - sr_fn (); // ok, no warning - vsr_fn (); // WARNING - reference not accessed -} - -struct T {int m;}; -T *tp_fn (); -T &tr_fn (); -volatile T *vtp_fn (); -volatile T &vtr_fn (); - -void complete_test (int i, T *p, volatile T *vp, T &r, volatile T &vr) -{ - T j; - volatile T vj; - - *p; // ok, no warning - (void)*p; // ok, no warning - (void)(i ? j : *p); // ok, no warning - (void)(i ? *p : j); // ok, no warning - (void)((void)1, *p); // ok, no warning - - *vp; // ok, no warning - (void)*vp; // ok, no warning - (void)(i ? vj : *vp); // ok, no warning - (void)(i ? *vp : vj); // ok, no warning - (void)((void)1, *vp); // ok, no warning - - r; // ok, no warning - (void)r; // ok, no warning - (void)(i ? j : r); // ok, no warning - (void)(i ? r : j); // ok, no warning - (void)((void)1, r); // ok, no warning - - vr; // WARNING - reference not accessed - (void)vr; // WARNING - reference not accessed - (void)(i ? vj : vr); // WARNING - reference not accessed - (void)(i ? vr : vj); // WARNING - reference not accessed - (void)((void)1, vr); // WARNING - reference not accessed - - *tp_fn (); // ok, no warning - *vtp_fn (); // ok, no warning - tr_fn (); // ok, no warning - vtr_fn (); // ok, no warningWARNING - reference not accessed -} - -void extern_test () -{ - extern S es; - extern volatile S ves; - extern T et; - extern volatile T vet; - - extern S &esr; - extern volatile S &vesr; - extern T &etr; - extern volatile T &vetr; - - es; // ok, no warning - ves; // WARNING - incomplete not accessed - et; // ok, no warning - vet; // ok, no warning - - esr; // ok, no warning - vesr; // WARNING - incomplete not accessed - etr; // ok, no warning - vetr; // WARNING - reference not accessed -}