diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-05-18 20:18:17 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-05-18 20:18:17 +0000 |
| commit | fb50dd34ed5d405de083e37d0c8a1baa2cd76387 (patch) | |
| tree | e2a8cee2339e6ca4dc7e2543050269ef80fbb650 /clang/test/CodeGenCXX/code_seg3.cpp | |
| parent | ad60559be7c636374dbfb9597588f9527ca1212a (diff) | |
| download | bcm5719-llvm-fb50dd34ed5d405de083e37d0c8a1baa2cd76387.tar.gz bcm5719-llvm-fb50dd34ed5d405de083e37d0c8a1baa2cd76387.zip | |
Revert r332470 (and corresponding tests in r332492).
This regressed our support for __attribute__((section)). See added test file
for example of code broken by this.
llvm-svn: 332760
Diffstat (limited to 'clang/test/CodeGenCXX/code_seg3.cpp')
| -rw-r--r-- | clang/test/CodeGenCXX/code_seg3.cpp | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/clang/test/CodeGenCXX/code_seg3.cpp b/clang/test/CodeGenCXX/code_seg3.cpp deleted file mode 100644 index a81e1b5bba9..00000000000 --- a/clang/test/CodeGenCXX/code_seg3.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -triple i686-pc-win32 -fms-extensions -verify -o - %s | FileCheck %s -// expected-no-diagnostics -// The Microsoft document says: "When this attribute is applied to a class, -// all member functions of the class and nested classes - this includes -// compiler-generated special member functions - are put in the specified segment." -// But the MS compiler does not always follow that. A bug has been reported: -// see https://reviews.llvm.org/D22931, the Microsoft feedback page is no -// longer available. -// The MS compiler will apply a declspec from the parent class if there is no -// #pragma code_seg active at the class definition. If there is an active -// code_seg that is used instead. - -// No active code_seg - -struct __declspec(code_seg("foo_outer")) Foo1 { - struct Inner { - void bar1(); - static void bar2(); - }; -}; -void Foo1::Inner::bar1() {} -void Foo1::Inner::bar2() {} - -//CHECK: define {{.*}}bar1@Inner@Foo1{{.*}} section "foo_outer" -//CHECK: define {{.*}}bar2@Inner@Foo1{{.*}} section "foo_outer" - -struct __declspec(code_seg("foo_outer")) Foo2 { - struct __declspec(code_seg("foo_inner")) Inner { - void bar1(); - static void bar2(); - }; -}; -void Foo2::Inner::bar1() {} -void Foo2::Inner::bar2() {} - -//CHECK: define {{.*}}bar1@Inner@Foo2{{.*}} section "foo_inner" -//CHECK: define {{.*}}bar2@Inner@Foo2{{.*}} section "foo_inner" - -#pragma code_seg(push, "otherseg") -struct __declspec(code_seg("foo_outer")) Foo3 { - struct Inner { - void bar1(); - static void bar2(); - }; -}; -void Foo3::Inner::bar1() {} -void Foo3::Inner::bar2() {} - -//CHECK: define {{.*}}bar1@Inner@Foo3{{.*}} section "otherseg" -//CHECK: define {{.*}}bar2@Inner@Foo3{{.*}} section "otherseg" - -struct __declspec(code_seg("foo_outer")) Foo4 { - struct __declspec(code_seg("foo_inner")) Inner { - void bar1(); - static void bar2(); - }; -}; -void Foo4::Inner::bar1() {} -void Foo4::Inner::bar2() {} - -//CHECK: define {{.*}}bar1@Inner@Foo4{{.*}} section "foo_inner" -//CHECK: define {{.*}}bar2@Inner@Foo4{{.*}} section "foo_inner" - -#pragma code_seg(pop) -// Back to no active pragma -struct __declspec(code_seg("foo_outer")) Foo5 { - struct Inner { - void bar1(); - static void bar2(); - struct __declspec(code_seg("inner1_seg")) Inner1 { - struct Inner2 { - void bar1(); - static void bar2(); - }; - }; - }; -}; -void Foo5::Inner::bar1() {} -void Foo5::Inner::bar2() {} -void Foo5::Inner::Inner1::Inner2::bar1() {} -void Foo5::Inner::Inner1::Inner2::bar2() {} - -//CHECK: define {{.*}}bar1@Inner@Foo5{{.*}} section "foo_outer" -//CHECK: define {{.*}}bar2@Inner@Foo5{{.*}} section "foo_outer" -//CHECK: define {{.*}}bar1@Inner2@Inner1@Inner@Foo5{{.*}} section "inner1_seg" -//CHECK: define {{.*}}bar2@Inner2@Inner1@Inner@Foo5{{.*}} section "inner1_seg" |

