From: Eric Botcazou Date: Sat, 17 Oct 2009 10:39:11 +0000 (+0000) Subject: * gcc-interface/trans.c (addressable_p): Handle bitwise operations. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9f4afcd44f9052bacea254f54f9ba6432fa3d6a2;p=gcc.git * gcc-interface/trans.c (addressable_p): Handle bitwise operations. From-SVN: r152932 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 219193f82c5..d74fccebda6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2009-10-17 Eric Botcazou + + * gcc-interface/trans.c (addressable_p): Handle bitwise operations. + 2009-10-16 Eric Botcazou * gcc-interface/ada-tree.h (TYPE_FAT_POINTER_P): Swap with... diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index ffcc72aac0f..271581a65e8 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -6949,6 +6949,10 @@ addressable_p (tree gnu_expr, tree gnu_type) case CALL_EXPR: case PLUS_EXPR: case MINUS_EXPR: + case BIT_IOR_EXPR: + case BIT_XOR_EXPR: + case BIT_AND_EXPR: + case BIT_NOT_EXPR: /* All rvalues are deemed addressable since taking their address will force a temporary to be created by the middle-end. */ return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8970e1c8ebb..217c0d71861 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-10-17 Eric Botcazou + + * gnat.dg/unchecked_convert4.adb: New test. + 2009-10-15 Jason Merrill PR c++/38798 diff --git a/gcc/testsuite/gnat.dg/unchecked_convert4.adb b/gcc/testsuite/gnat.dg/unchecked_convert4.adb new file mode 100644 index 00000000000..4f766ae04fe --- /dev/null +++ b/gcc/testsuite/gnat.dg/unchecked_convert4.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } + +with Unchecked_Conversion; + +procedure Unchecked_Convert4 is + + type Uint32 is mod 2**32; + + type Rec is record + I : Uint32; + end record; + pragma Atomic (Rec); + + function Conv is new Unchecked_Conversion (Uint32, Rec); + + function F return Uint32; + pragma Import (Ada, F); + + procedure Proc (R : Rec) is begin null; end; + +begin + Proc (Conv (F or 1)); +end;