⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 900428_01.c

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 C
字号:
// 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}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -