PR c++/78908 - template ops and bitfields
* tree.c (build_min_non_dep): Use unlowered_expr_type. From-SVN: r245343
This commit is contained in:
parent
5c97093ba7
commit
6a2cc46b79
@ -1,5 +1,8 @@
|
||||
2017-02-10 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/78908 - template ops and bitfields
|
||||
* tree.c (build_min_non_dep): Use unlowered_expr_type.
|
||||
|
||||
PR c++/78897 - constexpr union
|
||||
* constexpr.c (cxx_eval_store_expression): A store to a union member
|
||||
erases a previous store to another member.
|
||||
|
@ -2884,7 +2884,7 @@ build_min_non_dep (enum tree_code code, tree non_dep, ...)
|
||||
|
||||
t = make_node (code);
|
||||
length = TREE_CODE_LENGTH (code);
|
||||
TREE_TYPE (t) = TREE_TYPE (non_dep);
|
||||
TREE_TYPE (t) = unlowered_expr_type (non_dep);
|
||||
TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
|
||||
|
||||
for (i = 0; i < length; i++)
|
||||
|
20
gcc/testsuite/g++.dg/template/bitfield3.C
Normal file
20
gcc/testsuite/g++.dg/template/bitfield3.C
Normal file
@ -0,0 +1,20 @@
|
||||
// PR c++/78908
|
||||
|
||||
struct A { int a : 1; };
|
||||
struct F { int foo (A const &); };
|
||||
template <typename> struct O : F { int foo (A const &); };
|
||||
struct S {} b;
|
||||
template <typename L, typename T> int operator<< (L, T) { return (T) 123; }
|
||||
template <typename T> int O<T>::foo (A const &x) { return b << x.a; }
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
A a = { 0 };
|
||||
O<int> o;
|
||||
if (o.foo (a) != 123)
|
||||
__builtin_abort ();
|
||||
signed char d = 2;
|
||||
if ((b << d) != 123)
|
||||
__builtin_abort ();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user