--- /dev/null
+# Non-empty traps should be reset in subshell
+
+# HUP is special in interactive shells
+trap '' HUP
+# QUIT is always special
+trap '' QUIT
+# SYS is not special
+trap '' SYS
+# WINCH is harmless
+trap 'bad: caught WINCH' WINCH
+# With TERM we'll check whether it is reset
+trap 'bad: caught TERM' TERM
+
+(trap; "$THIS_SH" -c 'kill -HUP $PPID'; echo Ok)
+(trap; "$THIS_SH" -c 'kill -QUIT $PPID'; echo Ok)
+(trap; "$THIS_SH" -c 'kill -SYS $PPID'; echo Ok)
+(trap; "$THIS_SH" -c 'kill -WINCH $PPID'; echo Ok)
+(trap; "$THIS_SH" -c 'kill -TERM $PPID'; echo Bad: TERM is not reset)
+echo Done