Set the line number correctly for a nested function with an exec or
import *.  Mark the offending stmt rather than the function def line.
diff --git a/Include/symtable.h b/Include/symtable.h
index 6c4f284..315ce1f 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -46,6 +46,7 @@
 	int ste_nested;          /* true if scope is nested */
 	int ste_child_free;      /* true if a child scope has free variables,
 				    including free refs to globals */
+	int ste_opt_lineno;      /* lineno of last exec or import * */
 	struct symtable *ste_table;
 } PySymtableEntryObject;
 
diff --git a/Python/compile.c b/Python/compile.c
index fe84921..3e638ca 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -4241,7 +4241,7 @@
 	if (c->c_symtable->st_nested_scopes) {
 		PyErr_SetString(PyExc_SyntaxError, buf);
 		PyErr_SyntaxLocation(c->c_symtable->st_filename,
-				     ste->ste_lineno);
+				     ste->ste_opt_lineno);
 		return -1;
 	}
 	else {
@@ -4820,8 +4820,10 @@
 		symtable_node(st, CHILD(n, 1));
 		if (NCH(n) > 2)
 			symtable_node(st, CHILD(n, 3));
-		else
+		else {
 			st->st_cur->ste_optimized |= OPT_BARE_EXEC;
+			st->st_cur->ste_opt_lineno = n->n_lineno;
+		}
 		if (NCH(n) > 4)
 			symtable_node(st, CHILD(n, 5));
 		break;
@@ -5106,6 +5108,7 @@
 		}
 		if (TYPE(CHILD(n, 3)) == STAR) {
 			st->st_cur->ste_optimized |= OPT_IMPORT_STAR;
+			st->st_cur->ste_opt_lineno = n->n_lineno;
 		} else {
 			for (i = 3; i < NCH(n); i += 2) {
 				node *c = CHILD(n, i);