Browse Source

-ignore-unknown-attributes: fixed the attribute value being type checked in variable declarations

Dragos Popescu 2 years ago
parent
commit
75dcaf6d8d
1 changed files with 5 additions and 2 deletions
  1. 5 2
      src/checker.cpp

+ 5 - 2
src/checker.cpp

@@ -3248,9 +3248,8 @@ DECL_ATTRIBUTE_PROC(proc_decl_attribute) {
 }
 }
 
 
 DECL_ATTRIBUTE_PROC(var_decl_attribute) {
 DECL_ATTRIBUTE_PROC(var_decl_attribute) {
-	ExactValue ev = check_decl_attribute_value(c, value);
-
 	if (name == ATTRIBUTE_USER_TAG_NAME) {
 	if (name == ATTRIBUTE_USER_TAG_NAME) {
+		ExactValue ev = check_decl_attribute_value(c, value);
 		if (ev.kind != ExactValue_String) {
 		if (ev.kind != ExactValue_String) {
 			error(elem, "Expected a string value for '%.*s'", LIT(name));
 			error(elem, "Expected a string value for '%.*s'", LIT(name));
 		}
 		}
@@ -3262,6 +3261,7 @@ DECL_ATTRIBUTE_PROC(var_decl_attribute) {
 		ac->is_static = true;
 		ac->is_static = true;
 		return true;
 		return true;
 	} else if (name == "thread_local") {
 	} else if (name == "thread_local") {
+		ExactValue ev = check_decl_attribute_value(c, value);
 		if (ac->init_expr_list_count > 0) {
 		if (ac->init_expr_list_count > 0) {
 			error(elem, "A thread local variable declaration cannot have initialization values");
 			error(elem, "A thread local variable declaration cannot have initialization values");
 		} else if (c->foreign_context.curr_library) {
 		} else if (c->foreign_context.curr_library) {
@@ -3336,6 +3336,7 @@ DECL_ATTRIBUTE_PROC(var_decl_attribute) {
 		}
 		}
 		return true;
 		return true;
 	} else if (name == "link_name") {
 	} else if (name == "link_name") {
+		ExactValue ev = check_decl_attribute_value(c, value);
 		if (ev.kind == ExactValue_String) {
 		if (ev.kind == ExactValue_String) {
 			ac->link_name = ev.value_string;
 			ac->link_name = ev.value_string;
 			if (!is_foreign_name_valid(ac->link_name)) {
 			if (!is_foreign_name_valid(ac->link_name)) {
@@ -3346,6 +3347,7 @@ DECL_ATTRIBUTE_PROC(var_decl_attribute) {
 		}
 		}
 		return true;
 		return true;
 	} else if (name == "link_prefix") {
 	} else if (name == "link_prefix") {
+		ExactValue ev = check_decl_attribute_value(c, value);
 		if (ev.kind == ExactValue_String) {
 		if (ev.kind == ExactValue_String) {
 			ac->link_prefix = ev.value_string;
 			ac->link_prefix = ev.value_string;
 			if (!is_foreign_name_valid(ac->link_prefix)) {
 			if (!is_foreign_name_valid(ac->link_prefix)) {
@@ -3356,6 +3358,7 @@ DECL_ATTRIBUTE_PROC(var_decl_attribute) {
 		}
 		}
 		return true;
 		return true;
 	} else if (name == "link_section") {
 	} else if (name == "link_section") {
+		ExactValue ev = check_decl_attribute_value(c, value);
 		if (ev.kind == ExactValue_String) {
 		if (ev.kind == ExactValue_String) {
 			ac->link_section = ev.value_string;
 			ac->link_section = ev.value_string;
 			if (!is_foreign_name_valid(ac->link_section)) {
 			if (!is_foreign_name_valid(ac->link_section)) {