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

📄 empty4.c

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 C
字号:
// { dg-do run }// Copyright (C) 2001 Free Software Foundation, Inc.// Contributed by Nathan Sidwell 31 Jul 2001 <nathan@codesourcery.com>// Bug 3820. We were bit copying empty bases including the// padding. Which clobbers whatever they overlay.struct Empty {};struct Inter : Empty {};long now = 0;struct NonPod{  long m;  NonPod () {m = 0x12345678;}  NonPod (long m_) {m = m_;}  NonPod &operator= (NonPod const &src) {now = m; m = src.m; return *this;}  NonPod (NonPod const &src) {m = src.m;}};struct A : Inter{  A (long c) {m = c;}    NonPod m;};struct B{  Inter empty;  NonPod m;  B (long c) {m = c;}};struct C : NonPod, Inter{  C (long c) : NonPod (c), Inter () {}};int main (){  A a (0x12131415);    long was = a.m.m;    a = 0x22232425;  if (was != now)    return 1;	// we copied the empty base which clobbered a.m.m's		// original value.    A b (0x32333435);  *(Inter *)&a = *(Inter *)&b;    if (a.m.m != 0x22232425)    return 2;	// we copied padding, which clobbered a.m.m  A b2 (0x32333435);  (Inter &)b2 = Inter ();  if (b2.m.m != 0x32333435)    return 2;	// we copied padding, which clobbered b2.m.m    B c (0x12131415);  was = c.m.m;  c = 0x22232425;  if (was != now)    return 3;    B d (0x32333435);  c.empty = d.empty;  if (c.m.m != 0x22232425)    return 4;  C e (0x32333435);  if (e.m != 0x32333435)    return 2;	// we copied padding    return 0;}

⌨️ 快捷键说明

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