[LLVMbugs] [Bug 14407] New: Conditional assignment omitted when compiling a C program with llvm-gcc
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Wed Nov 21 23:13:30 PST 2012
http://llvm.org/bugs/show_bug.cgi?id=14407
Bug #: 14407
Summary: Conditional assignment omitted when compiling a C
program with llvm-gcc
Product: new-bugs
Version: 2.7
Platform: PC
OS/Version: Linux
Status: NEW
Severity: release blocker
Priority: P
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: edwardgaoyb at gmail.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
When compiling our application, I found that llvm-gcc frontend omitted the
conditional assignment. Please refer to the sample code snippet:
#include <stdio.h>
typedef struct {
int i1;
int i2;
int i3;
int i4;
} Entry1;
typedef struct {
int i1;
int i2;
int i3;
} Entry2;
int TestEntry1(int bCheck)
{
void* pEntry1 = 0;
void* pEntry2 = (bCheck != 0) ? ((void*)(((Entry1*) pEntry1) + 1)) :
((void*)(((Entry2*) pEntry1) + 1));
return (pEntry2 - pEntry1);
}
int main(int argc, const char * argv[])
{
printf("TestEntry1(1): %d\n", TestEntry1(1));
printf("TestEntry1(0): %d\n", TestEntry1(0));
return 0;
}
$llvm-gcc ca.c
$./a.out
TestEntry1(1): 16
TestEntry1(0): 16
while the expected output is:
TestEntry1(1): 16
TestEntry1(0): 12
After reviewing the assemble code, the "(bCheck != 0)" judgement is missing.
The other frontend "clang" works well.
--
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