[vala/wip/meson: 10/11] codegen: Don't use temp for owned internal variables



commit e372bd808295ded0b36613f3a0bfe5fb2f490378
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Aug 17 08:12:57 2017 +0200

    codegen: Don't use temp for owned internal variables
    
    https://bugzilla.gnome.org/show_bug.cgi?id=786388

 codegen/valaccodememberaccessmodule.vala |    4 +++-
 tests/Makefile.am                        |    1 +
 tests/methods/bug786388.vala             |   10 ++++++++++
 3 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 6bb5cb2..76955d3 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -744,9 +744,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        use_temp = false;
                }
                var local = variable as LocalVariable;
-               if (local != null && local.name[0] == '.') {
+               if (local != null && local.name[0] == '.' && !local.variable_type.value_owned) {
                        // already a temporary variable generated internally
                        // and safe to access without temporary variable
+                       // only allow this optimizatino if the variable doesn't hold
+                       // a reference, otherwise the memory-management breaks
                        use_temp = false;
                }
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 9baab1c..3d0e63d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -93,6 +93,7 @@ TESTS = \
        methods/bug771964.vala \
        methods/bug774060.vala \
        methods/bug775466.test \
+       methods/bug786388.vala \
        methods/generics.vala \
        methods/printf-invalid.test \
        methods/printf-constructor.vala \
diff --git a/tests/methods/bug786388.vala b/tests/methods/bug786388.vala
new file mode 100644
index 0000000..9745660
--- /dev/null
+++ b/tests/methods/bug786388.vala
@@ -0,0 +1,10 @@
+string name () throws GLib.Error {
+       string result = "test";
+       return (owned) result;
+}
+
+void main () {
+       {
+               print (_("%s\n"), name ());
+       }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]