[llvm-commits] [dragonegg] r164883 - in /dragonegg/trunk: src/Convert.cpp test/validator/c++/NotAddressable.cpp

Duncan Sands baldrick at free.fr
Fri Sep 28 21:50:50 PDT 2012


Author: baldrick
Date: Fri Sep 28 23:50:50 2012
New Revision: 164883

URL: http://llvm.org/viewvc/llvm-project?rev=164883&view=rev
Log:
If a function is not addressable then give it the unnamed_addr attribute.

Added:
    dragonegg/trunk/test/validator/c++/NotAddressable.cpp
Modified:
    dragonegg/trunk/src/Convert.cpp

Modified: dragonegg/trunk/src/Convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/Convert.cpp?rev=164883&r1=164882&r2=164883&view=diff
==============================================================================
--- dragonegg/trunk/src/Convert.cpp (original)
+++ dragonegg/trunk/src/Convert.cpp Fri Sep 28 23:50:50 2012
@@ -1003,6 +1003,8 @@
   TARGET_ADJUST_LLVM_LINKAGE(Fn,FnDecl);
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
 
+  Fn->setUnnamedAddr(!TREE_ADDRESSABLE(FnDecl));
+
   // Handle visibility style
   handleVisibility(FnDecl, Fn);
 

Added: dragonegg/trunk/test/validator/c++/NotAddressable.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/c%2B%2B/NotAddressable.cpp?rev=164883&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/c++/NotAddressable.cpp (added)
+++ dragonegg/trunk/test/validator/c++/NotAddressable.cpp Fri Sep 28 23:50:50 2012
@@ -0,0 +1,17 @@
+// RUN: %dragonegg %s -S -o - | FileCheck %s
+
+void a(int);
+
+struct Foo {
+  Foo();
+  ~Foo();
+  virtual void foo();
+};
+
+Foo::Foo() { a(1); }
+// CHECK: define void @_ZN3FooC2Ev{{.*}}unnamed_addr
+Foo::~Foo() { a(1); }
+// CHECK: define void @_ZN3FooD2Ev{{.*}}unnamed_addr
+void Foo::foo() { a(1); }
+
+Foo f;





More information about the llvm-commits mailing list