]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.cpp
Cleaner way to set the mask for -Wunused-component
[xonotic/gmqcc.git] / ir.cpp
diff --git a/ir.cpp b/ir.cpp
index d6a54932473b0e5df5f163ed4b8c82d6b457cbcd..6f06bdf95e23312cb1a52cddacd99ecf8e2bc161 100644 (file)
--- a/ir.cpp
+++ b/ir.cpp
@@ -633,12 +633,12 @@ bool ir_function_finalize(ir_function *self)
 
     for (auto& lp : self->m_locals) {
         ir_value *v = lp.get();
-        if (v->m_reads.empty() && v->m_writes.size()) {
+        if (v->m_reads.empty() && v->m_writes.size() && !(v->m_flags & IR_FLAG_NOREF)) {
             // if it's a vector check to ensure all it's members are unused before
             // claiming it's unused, otherwise skip the vector entierly
             if (v->m_vtype == TYPE_VECTOR)
             {
-                size_t mask = (1 << 0) | (1 << 1) | (1 << 2), bits = 0;
+                size_t mask = (1 << 3) - 1, bits = 0;
                 for (size_t i = 0; i < 3; i++)
                     if (!v->m_members[i] || (v->m_members[i]->m_reads.empty()
                         && v->m_members[i]->m_writes.size()))
@@ -651,13 +651,13 @@ bool ir_function_finalize(ir_function *self)
                     // individual components are unused so mention them
                     for (size_t i = 0; i < 3; i++)
                         if ((bits & (1 << i))
-                            && irwarning(v->m_context, WARN_UNUSED_VARIABLE,
-                                "unused variable: `%s.%c`", v->m_name.c_str(), "xyz"[i]))
+                            && irwarning(v->m_context, WARN_UNUSED_COMPONENT,
+                                "unused vector component: `%s.%c`", v->m_name.c_str(), "xyz"[i]))
                             return false;
             }
             // just a standard variable
             else if (irwarning(v->m_context, WARN_UNUSED_VARIABLE,
-                "unused variable: `%s`", v->m_name.c_str())) return false;
+                    "unused variable: `%s`", v->m_name.c_str())) return false;
         }
     }