+2014-04-23 Dinar Temirbulatov <dtemirbulatov@gmail.com>
+
+ PR c++/57958
+ * semantics.c (apply_deduced_return_type): Complete non-void type
+ before estimating whether the type is aggregate.
+
2014-04-22 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
if (!processing_template_decl)
{
+ if (!VOID_TYPE_P (TREE_TYPE (result)))
+ complete_type_or_else (TREE_TYPE (result), NULL_TREE);
bool aggr = aggregate_value_p (result, fco);
#ifdef PCC_STATIC_STRUCT_RETURN
cfun->returns_pcc_struct = aggr;
--- /dev/null
+// { dg-do run { target c++11 } }
+
+#define assert(E) if(!(E))__builtin_abort();
+
+int n = 0;
+
+template <class T>
+class Foo {
+ public:
+ Foo() {
+ n--;
+ }
+ Foo(const Foo&) {
+ n--;
+ }
+ ~Foo() {
+ n++;
+ }
+};
+
+struct Data {};
+
+void a()
+{
+ Data b;
+}
+
+int main(int argc, char *argv[]) {
+ auto fn = [] (const Foo<Data>& x) {
+ return (x);
+ };
+
+ {
+ Foo<Data> a;
+ fn(a);
+ }
+
+ assert(n == 0);
+}