From cfc002714a208bdbc51fade56141a38fbba26e24 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 14 Mar 2020 18:52:01 +0100 Subject: [PATCH] [AVR] Support aliases in non-zero address space This fixes code like the following on AVR: void foo(void) { } void bar(void) __attribute__((alias("foo"))); Code like this is present in compiler-rt, which I'm trying to build. Differential Revision: https://reviews.llvm.org/D76182 --- clang/lib/CodeGen/CodeGenModule.cpp | 3 ++- clang/test/CodeGen/alias-avr.c | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/alias-avr.c diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 8b7d52b..0f56dcb 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -4536,8 +4536,9 @@ void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) { } // Create the new alias itself, but don't set a name yet. + unsigned AS = Aliasee->getType()->getPointerAddressSpace(); auto *GA = - llvm::GlobalAlias::create(DeclTy, 0, LT, "", Aliasee, &getModule()); + llvm::GlobalAlias::create(DeclTy, AS, LT, "", Aliasee, &getModule()); if (Entry) { if (GA->getAliasee() == Entry) { diff --git a/clang/test/CodeGen/alias-avr.c b/clang/test/CodeGen/alias-avr.c new file mode 100644 index 0000000..dfec154 --- /dev/null +++ b/clang/test/CodeGen/alias-avr.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +int mul(int a, int b) { + return a * b; +} + +// CHECK: @multiply = alias i16 (i16, i16), i16 (i16, i16) addrspace(1)* @mul +int multiply(int x, int y) __attribute__((alias("mul"))); -- 2.7.4