scons: fix hook for 'deprecated' attribute

On the new release, the compilation is polluted by the same warning:
    > ''deprecated' attribute directive ignored

It seems that the hook added in this patch does not work:

The snippet of code compile with TryCompile on g++{8,9}.
It probably comes from the fact that the compilation
only creates a warning and not an error.

By adding temporarily '-Werror' for this compilation test,
it filters the faulty gcc versions.

Change-Id: I2b8b7a1a7e06df437b76e98d212947f4f9452311
Reviewed-by: Gabe Black <>
Maintainer: Gabe Black <>
Tested-by: kokoro <>
(cherry picked from commit a366e66272b7c4b01037d68a7723922b49f506cd)
Maintainer: Bobby R. Bruce <>
Reviewed-by: Jason Lowe-Power <>
Reviewed-by: Daniel Carvalho <>
diff --git a/src/base/SConsopts b/src/base/SConsopts
index ea11bd4..9fafd64 100644
--- a/src/base/SConsopts
+++ b/src/base/SConsopts
@@ -56,12 +56,21 @@
     # alternative stacks.
     conf.env['HAVE_VALGRIND'] = conf.CheckCHeader('valgrind/valgrind.h')
-    conf.env['HAVE_DEPRECATED_NAMESPACE'] = conf.TryCompile('''
+# Check if the compiler supports the [[gnu::deprecated]] attribute
+# Create a temporary environment with -Werror in CCFLAGS
+werror_env = main.Clone()
+with gem5_scons.Configure(werror_env) as conf:
+    # Store result in the main environment
+    main['HAVE_DEPRECATED_NAMESPACE'] = conf.TryCompile('''
         int main() {return 0;}
         namespace [[gnu::deprecated("Test namespace deprecation")]]
         test_deprecated_namespace {}
     ''', '.cc')
-    if not conf.env['HAVE_DEPRECATED_NAMESPACE']:
+    if not main['HAVE_DEPRECATED_NAMESPACE']:
         warning("Deprecated namespaces are not supported by this compiler.\n"
                 "Please make sure to check the mailing list for deprecation "