Look at the following source code:

#include <stdio.h>

typedef int __attribute__ ((aligned (16))) aint;

inline void function() {
    static const aint x = 123;

    unsigned long a = (unsigned long) &x;
    printf("Address of x: 0x%lX - %s\n", a, a & 15L ? "ALIGNMENT ERROR" :
"ok");
}

int main() {
    function();
    return 0;
}

The output on my system is:

Address of x: 0x40E3E8 - ALIGNMENT ERROR

The variable x is supposed to be aligned on a 16 byte boundary, but it is not.
Note that this only happens when the function is inline and the variable is
static. If I remove either "inline" or "static", the alignment seems to work
properly.

I am aware of bug #15795, but this is a different issue, since I'm not
dynamically allocating memory here.

Compiled like this:
  g++ tst.cpp -o tst

Output of gcc -v:
  Using built-in specs.
  Target: i686-pc-cygwin
  Configured with: ../../source/gcc-4.1.1/configure --enable-threads=posix
--enable-languages=c,c++ --disable-win32-registry
  Thread model: posix
  gcc version 4.1.1

I am using Cygwin on Windows 2000 Professional and Windows XP, and compiled GCC
4.1.1 from source using the configuration as specified above.


-- 
           Summary: Alignment error with static const variable in inline
                    function
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jespdj at hotmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29249

Reply via email to