[LLVMbugs] [Bug 8540] New: "llvm-gcc -m96bit-long-double" addresses memory incorrectly

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Nov 3 07:40:38 PDT 2010


           Summary: "llvm-gcc -m96bit-long-double" addresses memory
           Product: new-bugs
           Version: 2.8
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jdenny at etinternational.com
                CC: llvmbugs at cs.uiuc.edu

My platform is x86-64, so llvm-gcc normally folds sizeof(long double) into 16. 
The problem is that "llvm-gcc -m96bit-long-double" folds sizeof(long double)
into 12, but getelementptr still assumes 16.

This problem can be demonstrated as follows:

% cat > test.c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
  long double *a = malloc(sizeof(long double) * SIZE);
  for (int i = 0; i < SIZE; ++i)
    a[i] = i+1;
  for (int i = 0; i < SIZE; ++i)
    printf ("a[%d] = %Lf\n", i, a[i]);
  free (a);
  return 0;
% llvm-gcc -std=c99 -m96bit-long-double -emit-llvm -S -o test.ll test.c
% llvmc test.ll
% valgrind ./a.out |& grep Invalid
==3882== Invalid write of size 4
==3882== Invalid write of size 2
==3882== Invalid read of size 4
==3882== Invalid read of size 2

Looking inside test.ll, I see f80:128:128, but I also see sizeof(long 
double)*5 folded into 60.  Changing f80:128:128 to f80:96:96 does not fix 
the errors reported by valgrind.  If I instead fix the folded constant, 
the errors go away, of course.

Further discussion appears in this thread:


Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list