Skip to content

Warning: index register overlaps transfer register after 60e0120c913dd #44173

@nathanchance

Description

@nathanchance
Bugzilla Link 44828
Resolution FIXED
Resolved on Feb 10, 2020 05:22
Version trunk
OS All
Blocks #43900
CC @efriedma-quic,@zmodem,@kbeyls,@nickdesaulniers,@smithp35,@vhscampos

Extended Description

When building an ARM Linux kernel, we see assembler warnings after 60e0120.

$ make -j$(nproc) -s ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi- O=out.arm32 distclean defconfig kernel/sched/fair.o
/tmp/fair-f01157.s: Assembler messages:
/tmp/fair-f01157.s:1048: Warning: index register overlaps transfer register

I was able to creduce a problematic translation unit to

struct g {
long h;
struct g *i;
struct g *j
};
struct k {
struct k *b
};
struct l {
long m;
int n
};
struct o {
} attribute((aligned(1 << 6)));
struct a {
struct a *b, *c
} aj(ak) {
*(volatile long long *)ak;
}
struct p {
struct l a;
long q;
struct g r;
struct a s;
int t;
long long u;
long v;
long long b;
long w;
struct o aa
};
struct {
long d;
void *e;
int f;
int b;
int c;
struct k x;
int y;
int z;
long ab;
int ac;
int a;
int ad;
int t;
int ae;
int af;
int ag;
int ah;
struct p ai
} a;
al() { aj(&a.ai.aa); }

See ClangBuiltLinux/linux#838 for more details.

This is going to be a regression in clang-10, it would be nice to either revert that commit or come up with a fix quickly, since this was reported on Phabricator three weeks ago and there has been no movement.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions