Browse Source

Add `sanitize_address` attribute to all normal packages

gingerBill 1 year ago
parent
commit
38d2a0ddb9
4 changed files with 10 additions and 6 deletions
  1. 1 1
      src/checker.cpp
  2. 2 4
      src/docs_writer.cpp
  3. 6 1
      src/llvm_backend_proc.cpp
  4. 1 0
      src/parser.hpp

+ 1 - 1
src/checker.cpp

@@ -858,7 +858,7 @@ gb_internal AstPackage *create_builtin_package(char const *name) {
 	gbAllocator a = permanent_allocator();
 	AstPackage *pkg = gb_alloc_item(a, AstPackage);
 	pkg->name = make_string_c(name);
-	pkg->kind = Package_Normal;
+	pkg->kind = Package_Builtin;
 
 	pkg->scope = create_scope(nullptr, nullptr);
 	pkg->scope->flags |= ScopeFlag_Pkg | ScopeFlag_Global | ScopeFlag_Builtin;

+ 2 - 4
src/docs_writer.cpp

@@ -1101,11 +1101,9 @@ gb_internal void odin_doc_write_docs(OdinDocWriter *w) {
 		case Package_Init:
 			pkg_flags |= OdinDocPkgFlag_Init;
 			break;
-		}
-		if (pkg->name == "builtin") {
-			pkg_flags |= OdinDocPkgFlag_Builtin;
-		} else if (pkg->name == "intrinsics") {
+		case Package_Builtin:
 			pkg_flags |= OdinDocPkgFlag_Builtin;
+			break;
 		}
 
 		OdinDocPkg doc_pkg = {};

+ 6 - 1
src/llvm_backend_proc.cpp

@@ -152,7 +152,6 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i
 		lb_add_attribute_to_proc(m, p->value, "noredzone");
 	}
 
-
 	switch (p->inlining) {
 	case ProcInlining_inline:
 		lb_add_attribute_to_proc(m, p->value, "alwaysinline");
@@ -318,6 +317,12 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i
 		}
 	}
 
+	if (p->body && entity->pkg && (entity->pkg->kind == Package_Normal) || (entity->pkg->kind == Package_Init)) {
+		if (build_context.sanitizer_flags & SanitizerFlag_Address) {
+			lb_add_attribute_to_proc(m, p->value, "sanitize_address");
+		}
+	}
+
 	lbValue proc_value = {p->value, p->type};
 	lb_add_entity(m, entity,  proc_value);
 	lb_add_member(m, p->name, proc_value);

+ 1 - 0
src/parser.hpp

@@ -60,6 +60,7 @@ enum PackageKind {
 	Package_Normal,
 	Package_Runtime,
 	Package_Init,
+	Package_Builtin,
 };
 
 struct ImportedFile {