Skip to content

Different register allocation on three-parameter function #244

Description

@blackgeorge-boom

Minimal example:

void rec(int a, int b, int c)
{
	if (a == 0)
		return;
	else {
		rec(a - 1, b, c);
		return;
	}
}

int main()
{
	rec(1, 2, 3);
}
 [STACKMAPS CHECK] Checking stackmaps for main_aarch64_aligned.out main_x86_64_aligned.out
make[1]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[1]: Entering directory '/home/blackgeorge/Documents/phd/unified_abi/stack-metadata'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/blackgeorge/Documents/phd/unified_abi/stack-metadata'
WARNING: rec: callsite 0, value locations 0/0 have different location type (3 vs. 1)
WARNING: rec: callsite 0, value locations 0/0 have different location offset or  different constant (-40 vs. 0)
WARNING: rec: callsite 0, value locations 1/1 have different location type (1 vs. 3)
WARNING: rec: callsite 0, value locations 1/1 have different location offset or  different constant (0 vs. -40)
ERROR: stackmaps in 'main_aarch64_aligned.out' & 'main_x86_64_aligned.out' differ - different stack layout!
make: *** [../../common/common.mk:193: stackmaps-check] Error 1

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions