[vala/wip/meson: 10/11] codegen: Don't use temp for owned internal variables
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/meson: 10/11] codegen: Don't use temp for owned internal variables
- Date: Sun, 20 Aug 2017 18:45:15 +0000 (UTC)
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]