I just tried to compile the Linux kernel 2.6.33-rc6 under valgrind with the C compiler version 4.5 snapshot 20100128 and valgrind said ==17102== Conditional jump or move depends on uninitialised value(s) ==17102== at 0x56D105: expand_debug_expr (cfgexpand.c:2487) ==17102== by 0x56C912: expand_debug_expr (cfgexpand.c:2876) ==17102== by 0x570D54: gimple_expand_cfg (cfgexpand.c:2981) ==17102== by 0x722ECA: execute_one_pass (passes.c:1561) ==17102== by 0x723154: execute_pass_list (passes.c:1616) ==17102== by 0x818C94: tree_rest_of_compilation (tree-optimize.c:413) ==17102== by 0x99A420: cgraph_expand_function (cgraphunit.c:1543) ==17102== by 0x99CE44: cgraph_optimize (cgraphunit.c:1622) ==17102== by 0x99D3A4: cgraph_finalize_compilation_unit (cgraphunit.c:1093) ==17102== by 0x4B0602: c_write_global_declarations (c-decl.c:9537) ==17102== by 0x7C7AFB: toplev_main (toplev.c:1065) ==17102== by 0x6568A7C: (below main) (in /lib64/libc-2.10.1.so) ==17102== Line 2487 of cfgexpand.c is if (bitsize == 0) return NULL; Preprocessed source code attached. Flags -Os -g required.
Created attachment 19817 [details] C source code
Which means that likely DEBUG_DECLs do not have DECL_SIZE set properly.
No, this is not really debug-expr related. We have struct crypto_tfm { ... void *__crt_ctx[] __attribute__ ((__aligned__(__alignof__(unsigned long long)))); }; and the FIELD_DECL for __crt_ctx has DECL_SIZE == 0, so get_inner_reference on a COMPONENT_REF of __crt_ctx will leave us with *pbitsize uninitialized. I have a patch.
*** Bug 42993 has been marked as a duplicate of this bug. ***
Subject: Bug 42991 Author: rguenth Date: Sun Feb 7 17:18:22 2010 New Revision: 156575 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=156575 Log: 2010-02-07 Richard Guenther <rguenther@suse.de> PR middle-end/42991 * expr.c (get_inner_reference): Always initialize *pbitsize. Modified: trunk/gcc/ChangeLog trunk/gcc/expr.c
Fixed.