diff --git a/src/libs/glsl/glslastdump.cpp b/src/libs/glsl/glslastdump.cpp
index b22ac1bead1a0cec0086db71f2bbf64dd7a42240..337e120ed810091c74e8e11a6cefecf0a117bd08 100644
--- a/src/libs/glsl/glslastdump.cpp
+++ b/src/libs/glsl/glslastdump.cpp
@@ -51,9 +51,13 @@ bool ASTDump::preVisit(AST *ast)
 {
     const char *id = typeid(*ast).name();
 #ifdef Q_CC_GNU
-    id = abi::__cxa_demangle(id, 0, 0, 0);
+    char *cppId = abi::__cxa_demangle(id, 0, 0, 0);
+    id = cppId;
 #endif
     out << QByteArray(_depth, ' ') << id << endl;
+#ifdef Q_CC_GNU
+    free(cppId);
+#endif
     ++_depth;
     return true;
 }