From b0d5b9f12adbce2c4a0df6059f5671188cd32293 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 30 Apr 2011 12:37:47 -0700 Subject: gcc-4.6.0: Backport FSF 4.6 branch patches This is set of bugfixes that has been done on FSF gcc-4_2-branch since 4.6.0 was released They will roll into 4.6.1 release once that happens in coming approx 6 months time then we can simply remove them thats the reason so use a separate .inc file to define the SRC_URI additions Signed-off-by: Khem Raj --- ...026-decl2.c-cp_check_const_attributes-New.patch | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0026-decl2.c-cp_check_const_attributes-New.patch (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0026-decl2.c-cp_check_const_attributes-New.patch') diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0026-decl2.c-cp_check_const_attributes-New.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0026-decl2.c-cp_check_const_attributes-New.patch new file mode 100644 index 000000000..15136bfa9 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0026-decl2.c-cp_check_const_attributes-New.patch @@ -0,0 +1,117 @@ +From 87e73453e8135e72f592c1d7c84da942e7a1e308 Mon Sep 17 00:00:00 2001 +From: jason +Date: Tue, 29 Mar 2011 14:24:59 +0000 +Subject: [PATCH 026/200] * decl2.c (cp_check_const_attributes): New. + (cplus_decl_attributes): Call cp_check_const_attributes. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171667 138bc75d-0d04-0410-961f-82ee72b054a4 + +index eb5d4f5..f62f913 100644 +--- a/gcc/cp/decl2.c ++++ b/gcc/cp/decl2.c +@@ -1264,6 +1264,25 @@ cp_reconstruct_complex_type (tree type, tree bottom) + return cp_build_qualified_type (outer, cp_type_quals (type)); + } + ++/* Replaces any constexpr expression that may be into the attributes ++ arguments with their reduced value. */ ++ ++static void ++cp_check_const_attributes (tree attributes) ++{ ++ tree attr; ++ for (attr = attributes; attr; attr = TREE_CHAIN (attr)) ++ { ++ tree arg; ++ for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg)) ++ { ++ tree expr = TREE_VALUE (arg); ++ if (EXPR_P (expr)) ++ TREE_VALUE (arg) = maybe_constant_value (expr); ++ } ++ } ++} ++ + /* Like decl_attributes, but handle C++ complexity. */ + + void +@@ -1284,6 +1303,8 @@ cplus_decl_attributes (tree *decl, tree attributes, int flags) + return; + } + ++ cp_check_const_attributes (attributes); ++ + if (TREE_CODE (*decl) == TEMPLATE_DECL) + decl = &DECL_TEMPLATE_RESULT (*decl); + +new file mode 100644 +index 0000000..ac85c07 +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C +@@ -0,0 +1,63 @@ ++// { dg-options -std=c++0x } ++ ++//A few constexpr's ++constexpr int foo() { return __alignof__(int); } ++ ++template ++constexpr int fooT() { return __alignof__(T); } ++ ++template ++constexpr int fooN() { return N; } ++ ++//Now the attributes ++ ++//with normal variables, ++int a __attribute__((aligned(foo()))); ++int b __attribute__((aligned(fooT()))); ++int c __attribute__((aligned(fooN<__alignof__(int)>()))); ++ ++//with variables inside a template, ++template ++void fun() ++{ ++ T a __attribute__((aligned(foo()))); ++ T b __attribute__((aligned(fooT()))); ++ T c __attribute__((aligned(fooN<__alignof__(T)>()))); ++ T d __attribute__((aligned(fooT()))); ++ T e __attribute__((aligned(fooN<__alignof__(int)>()))); ++} ++ ++//instantiate it, ++void bar() ++{ ++ fun(); ++} ++ ++//with classes ++struct __attribute__((aligned(foo()))) S0 ++{ ++ char dummy; ++}; ++S0 s0; ++ ++struct __attribute__((aligned(fooT()))) S1 ++{ ++ char dummy; ++}; ++S1 s1; ++ ++//and class templates ++template ++struct __attribute__((aligned(foo()))) S2 ++{ ++ char dummy; ++}; ++ ++S2 s2; ++ ++template ++struct __attribute__((aligned(fooT()))) S3 ++{ ++ char dummy; ++}; ++S3 s3; +-- +1.7.0.4 + -- cgit v1.2.3