Backport #8216
closedRequest of backport of fix for Bug #8169
Description
Changesets r39958 and r39989 are needed on Ruby 1.9.3 branch for mkmf to properly test features on AIX.
Updated by usa (Usaku NAKAMURA) over 11 years ago
- Status changed from Open to Assigned
- Assignee set to usa (Usaku NAKAMURA)
Updated by usa (Usaku NAKAMURA) over 11 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r40715.
David, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
merge revision(s) 39958,39989: [Backport #8216]
* lib/mkmf.rb (MAIN_DOES_NOTHING): force to refer symbols for tests
to be preserved. [ruby-core:53745] [Bug #8169]
* lib/mkmf.rb (MAIN_DOES_NOTHING): ensure symbols for tests to be
preserved. [ruby-core:53745] [Bug #8169]
Updated by robertgrimm (Robert Grimm) about 11 years ago
Ruby 1.9.3's mkmf.rb generates an incorrect conftest.c with this change and results in a "main is undeclared" error.
As is, 1.9.3 will generate something like:
#include "ruby.h"
/top/
int t() { void ((volatile p)()); p = (void (()()))main; return 0; }
int main(int argc, char **argv)
{
if (argc > 1000000) {
printf("%p", &t);
}
return 0;
}
The t() function should be defined under main's definition and t() should be declared at the top. Ruby 2.0.0's mkmf.rb generates something like (which is correct):
#include "ruby.h"
/top/
extern int t(void);
int main(int argc, char **argv)
{
if (argc > 1000000) {
printf("%p", &t);
}
return 0;
}
int t() { void ((volatile p)()); p = (void (()()))main; return 0; }