Magellan Linux

Contents of /trunk/gcc/patches/gcc-4.9-java-regression.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2436 - (show annotations) (download)
Fri May 16 07:55:16 2014 UTC (10 years ago) by niro
File size: 2116 byte(s)
-added patch to fix regressions with openjdk
1 --- a/gcc/ipa-devirt.c 2014-04-08 07:35:11.000000000 +0200
2 +++ b/gcc/ipa-devirt.c 2014-05-10 16:46:14.502859179 +0200
3 @@ -987,6 +987,17 @@
4 context->outer_type = expected_type;
5 context->offset = 0;
6 context->maybe_derived_type = true;
7 + context->maybe_in_construction = true;
8 + /* POD can be changed to an instance of a polymorphic type by
9 + placement new. Here we play safe and assume that any
10 + non-polymorphic type is POD. */
11 + if ((TREE_CODE (type) != RECORD_TYPE
12 + || !TYPE_BINFO (type)
13 + || !polymorphic_type_binfo_p (TYPE_BINFO (type)))
14 + && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
15 + || (offset + tree_to_uhwi (TYPE_SIZE (expected_type)) <=
16 + tree_to_uhwi (TYPE_SIZE (type)))))
17 + return true;
18 return false;
19 }
20
21 --- a/gcc/testsuite/g++.dg/ipa/devirt-11.C 2013-09-08 18:42:21.000000000 +0200
22 +++ b/gcc/testsuite/g++.dg/ipa/devirt-11.C 2014-05-10 16:46:14.503859198 +0200
23 @@ -45,5 +45,5 @@
24 /* While inlining function called once we should devirtualize a new call to fn2
25 and two to fn3. While doing so the new symbol for fn2 needs to be
26 introduced. */
27 -/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline" } } */
28 +/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 1 "inline" } } */
29 /* { dg-final { cleanup-ipa-dump "inline" } } */
30 --- a/gcc/testsuite/g++.dg/ipa/devirt-31.C 1970-01-01 01:00:00.000000000 +0100
31 +++ b/gcc/testsuite/g++.dg/ipa/devirt-31.C 2014-05-10 16:46:14.503859198 +0200
32 @@ -0,0 +1,23 @@
33 +/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline" } */
34 +#include <new>
35 +
36 +class EmbeddedObject {
37 +public:
38 + virtual int val() { return 2; }
39 +};
40 +
41 +class Container {
42 + alignas(EmbeddedObject) char buffer[sizeof(EmbeddedObject)];
43 +public:
44 + EmbeddedObject *obj() { return (EmbeddedObject*)buffer; }
45 + Container() { new (buffer) EmbeddedObject(); }
46 +};
47 +
48 +Container o;
49 +
50 +int main()
51 +{
52 + __builtin_printf("%d\n", o.obj()->val());
53 +}
54 +/* { dg-final { scan-ipa-dump-not "__builtin_unreachable" "inline" } } */
55 +/* { dg-final { cleanup-ipa-dump "inline" } } */