Fix TestRegisterVariables for clang/arm

Clang rejects __attribute__((regparm)) when targetting arm. The default
calling convention passes arguments in registers anyway, so we can just
remove them in this case.

llvm-svn: 300670
This commit is contained in:
Pavel Labath 2017-04-19 10:13:29 +00:00
parent 107e694271
commit 7c437023ca
1 changed files with 11 additions and 2 deletions

View File

@ -1,17 +1,26 @@
#include <stdio.h>
#if defined(__arm__) || defined(__aarch64__)
// Clang does not accept regparm attribute on these platforms.
// Fortunately, the default calling convention passes arguments in registers
// anyway.
#define REGPARM(N)
#else
#define REGPARM(N) __attribute__((regparm(N)))
#endif
struct bar {
int m1;
int m2;
};
void f1(int a, struct bar *b) __attribute__((noinline)) __attribute__((regparm(2)));
void f1(int a, struct bar *b) __attribute__((noinline)) REGPARM(2);
void f1(int a, struct bar *b)
{
b->m2 = b->m1 + a; // set breakpoint here
}
void f2(struct bar *b) __attribute__((noinline)) __attribute__((regparm(1)));
void f2(struct bar *b) __attribute__((noinline)) REGPARM(1);
void f2(struct bar *b)
{
int c = b->m2;