diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7a8272c86e66fec6ec974c5cd33f821354870905..3dd1e4694b56be7b3d864039d96a768b311218e6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2003-03-19  Loren James Rittle  <ljrittle@acm.org>
+
+	* Makefile.in (STRICT2_WARN): Add @WERROR@.
+	(GCC_WARN_CFLAGS): Remove $(WERROR).
+	(fixinc.sh-warn): New.
+	* ada/Make-lang.in (ada-warn): Add $(WERROR).
+	* cp/Make-lang.in (cp-warn): Add $(WERROR).
+	* f/Make-lang.in (f-warn): Add $(WERROR).
+	* java/Make-lang.in (java-warn): Add $(WERROR).
+	* treelang/Make-lang.in (treelang-warn): Add $(WERROR).
+
 2003-03-19  Nathanael Nerode  <neroden@gcc.gnu.org>
 
 	* c-common.h (c_dump_tree), c-dump.c (c_dump_tree),
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index ce560e74f3fe7b4fcc912eee8c00005c91f94bd5..f2c23fb98688560188350e75e2c2126aca313d37 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -142,7 +142,7 @@ coverageexts = .{da,bbg}
 # stage1, as not all versions of gcc understand -Wno-long-long.
 LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
 STRICT_WARN = -Wtraditional @strict1_warn@
-STRICT2_WARN = -Wtraditional -pedantic -Wno-long-long
+STRICT2_WARN = -Wtraditional -pedantic -Wno-long-long @WERROR@
 
 # This is set by --enable-checking.  The idea is to catch forgotten
 # "extern" tags in header files.
@@ -154,7 +154,7 @@ VALGRIND_DRIVER_DEFINES = @valgrind_path_defines@
 
 # This is how we control whether or not the additional warnings are applied.
 .-warn = $(STRICT_WARN)
-GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $(WERROR) $($@-warn)
+GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
 
 # These files are to have -Werror bypassed in stage2:
 # These are very hard to completely clean due to target complexities.
@@ -2475,6 +2475,11 @@ specs.ready: specs
 		$(STAMP) specs.ready; \
 	fi
 
+# Until someone fixes this recursive make nightmare (please note where
+# BUILD_CFLAGS and WARN_CFLAGS are first expanded below versus which
+# later make invocation has the fine-grain -warn markings for fixinc):
+fixinc.sh-warn = -Wno-error
+
 FIXINCSRCDIR=$(srcdir)/fixinc
 fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
 	$(FIXINCSRCDIR)/procopen.c $(FIXINCSRCDIR)/gnu-regex.c \
diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in
index c0c0809a5bb5a5e9c5a1fbcba1799b85b9396938..c357ddbaf95e43c5221da24791575fd48683899d 100644
--- a/gcc/ada/Make-lang.in
+++ b/gcc/ada/Make-lang.in
@@ -83,7 +83,7 @@ ADA_FLAGS_TO_PASS = \
 
 # FIXME: need to add $(ALL_ADA_CFLAGS) to .c.o suffix rule
 # Use loose warnings for this front end, but add some special flags
-ada-warn = $(ALL_ADA_CFLAGS)
+ada-warn = $(ALL_ADA_CFLAGS) $(WERROR)
 # unresolved warnings in a couple of files
 ada/tracebak.o-warn = -Wno-error
 ada/b_gnatb.o-warn = -Wno-error
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index f6f707f515264ad5fd6e020d8b576a4f909c5827..cd4b21c0d4f8bafda0cf5a30d8ae52799a739b56 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -90,7 +90,7 @@ CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \
  cp/optimize.o cp/mangle.o cp/cp-lang.o
 
 # Use loose warnings for this front end.
-cp-warn =
+cp-warn = $(WERROR)
 
 cc1plus$(exeext): $(CXX_OBJS) $(CXX_C_OBJS) $(BACKEND) \
 		  libcpp.a $(LIBDEPS)
diff --git a/gcc/f/Make-lang.in b/gcc/f/Make-lang.in
index 16ee90b63743a0b547f39be593131a2d0581cec9..7acba675a3e391837698304cf35d948d747aeaea 100644
--- a/gcc/f/Make-lang.in
+++ b/gcc/f/Make-lang.in
@@ -92,7 +92,7 @@ F77_OBJS = f/bad.o f/bit.o f/bld.o f/com.o f/data.o f/equiv.o f/expr.o \
  f/stv.o f/stw.o f/symbol.o f/target.o f/top.o f/type.o f/where.o
 
 # Use loose warnings for this front end.
-f-warn =
+f-warn = $(WERROR)
 # type-punning warning
 f/sta.o-warn = -Wno-error
 
diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in
index 24b6acbb9a1ea48ad09a8522a6fbf5b1e016d549..b7c963b0ed0a330a2f4103063ca94ccf0000babb 100644
--- a/gcc/java/Make-lang.in
+++ b/gcc/java/Make-lang.in
@@ -123,7 +123,7 @@ JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
 JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o
 
 # Use loose warnings for this front end.
-java-warn =
+java-warn = $(WERROR)
 # String length warnings
 jvspec.o-warn = -Wno-error
 
diff --git a/gcc/treelang/Make-lang.in b/gcc/treelang/Make-lang.in
index 51dc49ab6c1fc566b425d4ef00b80458a3dda7be..9180d76183f6795a3f9b0b699465aba0f5d6147c 100644
--- a/gcc/treelang/Make-lang.in
+++ b/gcc/treelang/Make-lang.in
@@ -64,7 +64,7 @@ TREE_SOURCE = ${srcdir}/treelang/parse.y ${srcdir}/treelang/lex.l ${srcdir}/tree
 TREE_EXES = tree1$(exeext)
 
 #no -Wtraditional warnings, allow long long
-treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations
+treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations $(WERROR)
 # bison emits some unused static arrays (yytoknum)
 treelang/parse.o-warn = -Wno-error