[LLVMbugs] [Bug 4239] New: clang: incorrect handling of __attribute__ ((regparm (3), stdcall))
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Thu May 21 13:22:41 PDT 2009
http://llvm.org/bugs/show_bug.cgi?id=4239
Summary: clang: incorrect handling of __attribute__ ((regparm
(3), stdcall))
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: edwintorok at gmail.com
CC: llvmbugs at cs.uiuc.edu, rdivacky at freebsd.org
This bug in clang causes libgnuregex to crash/hang on FreeBSD.
Same file compiled with gcc works.
Testcase:
void abort(void) __attribute__((__noreturn__));
typedef void re_string_t;
typedef void re_dfa_t;
typedef int reg_errcode_t;
static reg_errcode_t re_string_construct (re_string_t *pstr, const char *str,
int len, char * trans,
int icase, const re_dfa_t *dfa)
__attribute__ ((regparm (3), stdcall));
static reg_errcode_t
re_string_construct (pstr, str, len, trans, icase, dfa)
re_string_t *pstr;
const char *str;
int len, icase;
char * trans;
const re_dfa_t *dfa;
{
if (dfa != (void*)0x282020c0)
abort();
return 0;
}
int main()
{
return re_string_construct(0, 0, 0, 0, 0, (void*)0x282020c0);
}
Works with gcc, llvm-gcc -m32, fails with clang -m32.
Works with clang on x86-64 (64-bit default).
There is something wrong with parameter passing, dfa becomes 0x3.
It seems that the missing x86_stdcallcc in the call causes this.
Shouldn't the verifier reject this assembly then? (incompatible calling
conventions).
--
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