forked from OSchip/llvm-project
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:
parent
107e694271
commit
7c437023ca
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue