+++ /dev/null
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-// This program failed when run under the C/C++ ThreadSanitizer. The TSAN
-// sigaction function interceptor returned SIG_DFL instead of the Go runtime's
-// handler in registerSegvForwarder.
-
-/*
-#cgo CFLAGS: -fsanitize=thread
-#cgo LDFLAGS: -fsanitize=thread
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-struct sigaction prev_sa;
-
-void forwardSignal(int signo, siginfo_t *info, void *context) {
- // One of sa_sigaction and/or sa_handler
- if ((prev_sa.sa_flags&SA_SIGINFO) != 0) {
- prev_sa.sa_sigaction(signo, info, context);
- return;
- }
- if (prev_sa.sa_handler != SIG_IGN && prev_sa.sa_handler != SIG_DFL) {
- prev_sa.sa_handler(signo);
- return;
- }
-
- fprintf(stderr, "No Go handler to forward to!\n");
- abort();
-}
-
-void registerSegvFowarder() {
- struct sigaction sa;
- memset(&sa, 0, sizeof(sa));
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
- sa.sa_sigaction = forwardSignal;
-
- if (sigaction(SIGSEGV, &sa, &prev_sa) != 0) {
- perror("failed to register SEGV forwarder");
- exit(EXIT_FAILURE);
- }
-}
-*/
-import "C"
-
-func main() {
- C.registerSegvFowarder()
-
- defer func() {
- recover()
- }()
- var nilp *int
- *nilp = 42
-}