From b5cc524623efe57f801e384054f8aaa500723b61 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Mon, 23 Feb 2015 16:25:18 +0100
Subject: [PATCH] Corrected dead code elimination

---
 compiler/2014/C_CodeGen.jrag | 35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff --git a/compiler/2014/C_CodeGen.jrag b/compiler/2014/C_CodeGen.jrag
index d53de29..0bf1eec 100644
--- a/compiler/2014/C_CodeGen.jrag
+++ b/compiler/2014/C_CodeGen.jrag
@@ -406,7 +406,7 @@ aspect C_Declarations {
   
   public void Decl.C_emitEncoderDeclaration(C_env env) {
   }
-//
+
   public void SampleDecl.C_emitEncoderDeclaration(C_env env) {
     env.println("int labcomm"+env.verStr+"_encoder_register_" + 
 		env.prefix + getName() + "(");
@@ -1252,6 +1252,7 @@ aspect C_TypeDependencies {
         }
     } 
   }
+
   public void Decl.C_emitUserTypeRefs(C_env env, String via, boolean outputCode) {
     if( isReferenced() ) {
         Iterator<Decl> it = type_references().iterator();
@@ -1283,27 +1284,15 @@ aspect C_Signature {
   eq TypeDecl.C_DeclTypeString() = "LABCOMM_TYPEDEF";
 
   public void Decl.C_emitSignature(C_env env) {
-  if( (isReferenced() || isSampleDecl())){ 
-    Signature signature = getSignature();
-    signature.C_emitSignature(env, !isSampleDecl());
-  } else {
-    env.println("// not emitting signature for "+getName()+isReferenced()+isSampleDecl());  
-  }
-  C_emitFlatSignature(env);
-
-
-//  if(env.versionHasMetaData()) { 
-//    if(isReferenced() || isSampleDecl()){
-//        env.println("(int (*)(void *))labcomm"+env.verStr+"_signature_" + 
-//	 	env.prefix + getName() + "_emit_signature");
-//    } else {
-//        env.println("NULL");  // HERE BE DRAGONS! Is it worth the size saving to skip emitting the emit_signature function for unused types?
-//                              //                  The code won't likely end up in a target system anyway?
-//    }
-//  }
-//  env.unindent();
-//  env.println(" };");
-//
+    if( (isReferenced() || isSampleDecl())){
+      Signature signature = getSignature();
+      signature.C_emitSignature(env, !isSampleDecl());
+      C_emitFlatSignature(env);
+    } else {
+      env.println("// not emitting signature for " + getName() +
+                  "referenced=" + isReferenced() +
+                  "sampledecl=" + isSampleDecl());
+    }
   }
 
   public void ASTNode.C_emitFlatSignature(C_env env) {
@@ -1312,7 +1301,7 @@ aspect C_Signature {
                     " not declared");
   }
 
-  public void Decl.C_emitFlatSignature(C_env env) {
+  public void TypeDecl.C_emitFlatSignature(C_env env) {
     C_emitSizeofValue(env);
     env.println("static struct labcomm"+env.verStr+"_signature " +
                 "signature_" + env.prefix + getName() + " = {");
-- 
GitLab