authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-17 15:58:20-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-17 15:58:20-04:00
logff3cdbc3a078de1d54c13737264ed62f77ff1f50
treeb2ff8f1a46a40a39268153b6f0971e6ee5403817
parent4ad7d09ba5f6f021cb6b6c2045e26fe252f61a27
signature Commit is signed but in an unrecognized format.

stage1 assertions always on, and have stack traces


8 files changed, 37 insertions(+), 12 deletions(-)

src-self-hosted/stage1.zig+4
...@@ -25,3 +25,7 @@ export fn stage2_zen(ptr: *[*]const u8, len: *usize) void {...@@ -25,3 +25,7 @@ export fn stage2_zen(ptr: *[*]const u8, len: *usize) void {
25 ptr.* = &info_zen;25 ptr.* = &info_zen;
26 len.* = info_zen.len;26 len.* = info_zen.len;
27}27}
28
29export fn stage2_panic(ptr: [*]const u8, len: usize) void {
30 @panic(ptr[0..len]);
31}
src/buffer.hpp-1
...@@ -10,7 +10,6 @@...@@ -10,7 +10,6 @@
1010
11#include "list.hpp"11#include "list.hpp"
1212
13#include <assert.h>
14#include <stdint.h>13#include <stdint.h>
15#include <ctype.h>14#include <ctype.h>
16#include <stdarg.h>15#include <stdarg.h>
src/error.hpp+1-5
...@@ -8,8 +8,6 @@...@@ -8,8 +8,6 @@
8#ifndef ERROR_HPP8#ifndef ERROR_HPP
9#define ERROR_HPP9#define ERROR_HPP
1010
11#include <assert.h>
12
13enum Error {11enum Error {
14 ErrorNone,12 ErrorNone,
15 ErrorNoMem,13 ErrorNoMem,
...@@ -56,8 +54,6 @@ enum Error {...@@ -56,8 +54,6 @@ enum Error {
5654
57const char *err_str(Error err);55const char *err_str(Error err);
5856
59static inline void assertNoError(Error err) {57#define assertNoError(err) assert((err) == ErrorNone);
60 assert(err == ErrorNone);
61}
6258
63#endif59#endif
src/list.hpp-2
...@@ -10,8 +10,6 @@...@@ -10,8 +10,6 @@
1010
11#include "util.hpp"11#include "util.hpp"
1212
13#include <assert.h>
14
15template<typename T>13template<typename T>
16struct ZigList {14struct ZigList {
17 void deinit() {15 void deinit() {
src/userland.cpp+17-3
...@@ -2,9 +2,23 @@...@@ -2,9 +2,23 @@
2// src-self-hosted/stage1.zig2// src-self-hosted/stage1.zig
33
4#include "userland.h"4#include "userland.h"
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9void stage2_translate_c(void) {
10 const char *msg = "stage0 called stage2_translate_c";
11 stage2_panic(msg, strlen(msg));
12}
513
6void stage2_translate_c(void) {}
7void stage2_zen(const char **ptr, size_t *len) {14void stage2_zen(const char **ptr, size_t *len) {
8 *ptr = nullptr;15 const char *msg = "stage0 called stage2_zen";
9 *len = 0;16 stage2_panic(msg, strlen(msg));
17}
18
19void stage2_panic(const char *ptr, size_t len) {
20 fwrite(ptr, 1, len, stderr);
21 fprintf(stderr, "\n");
22 fflush(stderr);
23 abort();
10}24}
src/userland.h+2
...@@ -20,4 +20,6 @@ ZIG_USERLAND_EXTERN_C void stage2_translate_c(void);...@@ -20,4 +20,6 @@ ZIG_USERLAND_EXTERN_C void stage2_translate_c(void);
2020
21ZIG_USERLAND_EXTERN_C void stage2_zen(const char **ptr, size_t *len);21ZIG_USERLAND_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
2222
23ZIG_USERLAND_EXTERN_C void stage2_panic(const char *ptr, size_t len);
24
23#endif25#endif
src/util.cpp+9-1
...@@ -10,17 +10,25 @@...@@ -10,17 +10,25 @@
10#include <stdarg.h>10#include <stdarg.h>
1111
12#include "util.hpp"12#include "util.hpp"
13#include "userland.h"
1314
14void zig_panic(const char *format, ...) {15void zig_panic(const char *format, ...) {
15 va_list ap;16 va_list ap;
16 va_start(ap, format);17 va_start(ap, format);
17 vfprintf(stderr, format, ap);18 vfprintf(stderr, format, ap);
18 fprintf(stderr, "\n");
19 fflush(stderr);19 fflush(stderr);
20 va_end(ap);20 va_end(ap);
21 stage2_panic(nullptr, 0);
21 abort();22 abort();
22}23}
2324
25void assert(bool ok) {
26 if (!ok) {
27 const char *msg = "Assertion failed. This is a bug in the Zig compiler.";
28 stage2_panic(msg, strlen(msg));
29 }
30}
31
24uint32_t int_hash(int i) {32uint32_t int_hash(int i) {
25 return (uint32_t)(i % UINT32_MAX);33 return (uint32_t)(i % UINT32_MAX);
26}34}
src/util.hpp+4
...@@ -48,6 +48,10 @@ void zig_panic(const char *format, ...);...@@ -48,6 +48,10 @@ void zig_panic(const char *format, ...);
4848
49#define zig_unreachable() zig_panic("unreachable: %s:%s:%d", __FILE__, __func__, __LINE__)49#define zig_unreachable() zig_panic("unreachable: %s:%s:%d", __FILE__, __func__, __LINE__)
5050
51// Assertions in stage1 are always on, and they call zig @panic.
52#undef assert
53void assert(bool ok);
54
51#if defined(_MSC_VER)55#if defined(_MSC_VER)
52static inline int clzll(unsigned long long mask) {56static inline int clzll(unsigned long long mask) {
53 unsigned long lz;57 unsigned long lz;