From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5887 invoked by alias); 5 Apr 2008 18:33:51 -0000 Received: (qmail 5775 invoked by uid 48); 5 Apr 2008 18:33:08 -0000 Date: Sat, 05 Apr 2008 18:33:00 -0000 Subject: [Bug c++/35835] New: Compiler fails to recognize match of local "extern" declarations X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "oder at eleks dot lviv dot ua" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-04/txt/msg00429.txt.bz2 Consider following program ======= begin of test.cpp ======== #include static inline void SetValue(int i) { extern int g_iValue; g_iValue = i; } static inline int GetValue() { extern int g_iValue; return g_iValue; } int g_iValue = 0; int main() { int iValueSave = GetValue(); SetValue(1); printf("%d\n", GetValue()); SetValue(iValueSave); return 0; } ======= end of test.cpp ======== I use this apptoach to only publish get/set global variable accessors in header while keeping variable itself hidden in cpp. If compiled with optimizations turned on, compiler fails identify two local "extern" declarations as a single memory object and uses initial value retrieved for iValueSafe in call to printf as well (as if SetValue() was unrelated to g_iValue). If compiled and run, program outputs 0 instead of 1. osx-leopard:build oder$ g++ -O3 -o test test.cpp osx-leopard:build oder$ ./test 0 Output of "g++ -v" is: Using built-in specs. Target: powerpc-apple-darwin9 Configured with: /var/tmp/gcc/gcc-5478~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.0.1 (Apple Inc. build 5478) -- Summary: Compiler fails to recognize match of local "extern" declarations Product: gcc Version: 4.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: oder at eleks dot lviv dot ua GCC build triplet: ppc GCC host triplet: ppc GCC target triplet: ppc http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35835