diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index dbcd9f7..a025c20 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -3,7 +3,6 @@
 import os
 import sys
 import unittest
-import warnings
 import weakref
 
 from test import support
@@ -240,10 +239,8 @@
                     ast_tree = compile(i, "?", kind, ast.PyCF_ONLY_AST)
                     self.assertEqual(to_tuple(ast_tree), o)
                     self._assertTrueorder(ast_tree, (0, 0))
-                with warnings.catch_warnings():
-                    warnings.filterwarnings('ignore', category=SyntaxWarning)
-                    with self.subTest(action="compiling", input=i, kind=kind):
-                        compile(ast_tree, "?", kind)
+                with self.subTest(action="compiling", input=i, kind=kind):
+                    compile(ast_tree, "?", kind)
 
     def test_slice(self):
         slc = ast.parse("x[::]").body[0].value.slice
diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 2cf088c..21b12a5 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -66,6 +66,24 @@
 flags: 67
 consts: ('None',)
 
+>>> def optimize_away():
+...     'doc string'
+...     'not a docstring'
+...     53
+...     0x53
+
+>>> dump(optimize_away.__code__)
+name: optimize_away
+argcount: 0
+kwonlyargcount: 0
+names: ()
+varnames: ()
+cellvars: ()
+freevars: ()
+nlocals: 0
+flags: 67
+consts: ("'doc string'", 'None')
+
 >>> def keywordonly_args(a,b,*,k1):
 ...     return a,b,k1
 ...
@@ -84,10 +102,8 @@
 
 """
 
-import textwrap
 import unittest
 import weakref
-import warnings
 from test.support import run_doctest, run_unittest, cpython_only
 
 
@@ -118,44 +134,6 @@
         self.assertEqual(co.co_name, "funcname")
         self.assertEqual(co.co_firstlineno, 15)
 
-    def dump(self, co):
-        dump = {}
-        for attr in ["name", "argcount", "kwonlyargcount", "names", "varnames",
-                     "cellvars", "freevars", "nlocals", "flags"]:
-            dump[attr] = getattr(co, "co_" + attr)
-        dump['consts'] = tuple(consts(co.co_consts))
-        return dump
-
-    def test_optimize_away(self):
-        ns = {}
-        with warnings.catch_warnings():
-            warnings.filterwarnings('ignore', category=SyntaxWarning)
-            exec(textwrap.dedent('''
-                def optimize_away():
-                    'doc string'
-                    'not a docstring'
-                    53
-                    0x53
-                    b'bytes'
-                    1.0
-                    True
-                    False
-                    None
-                    ...
-            '''), ns)
-
-        self.assertEqual(self.dump(ns['optimize_away'].__code__),
-                        {'name': 'optimize_away',
-                         'argcount': 0,
-                         'kwonlyargcount': 0,
-                         'names': (),
-                         'varnames': (),
-                         'cellvars': (),
-                         'freevars': (),
-                         'nlocals': 0,
-                         'flags': 67,
-                         'consts': ("'doc string'", 'None')})
-
 
 class CodeWeakRefTest(unittest.TestCase):
 
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 2d6f5ed..8f8d71c 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -7,7 +7,6 @@
 import sys
 # testing import *
 from sys import *
-from test import support
 
 
 class TokenTests(unittest.TestCase):
@@ -425,11 +424,8 @@
     # Tested below
 
     def test_expr_stmt(self):
-        msg = 'ignore constant statement'
-        with support.check_warnings((msg, SyntaxWarning)):
-            exec("1")
-
         # (exprlist '=')* exprlist
+        1
         1, 2, 3
         x = 1
         x = 1, 2, 3
diff --git a/Misc/NEWS b/Misc/NEWS
index e1875c0..d60aeb6 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,9 +10,10 @@
 Core and Builtins
 -----------------
 
-- Issue #26204: The compiler now ignores constant statements (ex: "def f(): 1")
-  and emit a SyntaxWarning warning. The warning is not emitted for string and
-  ellipsis (...) statements.
+- Issue #26204: The compiler now ignores all constant statements: bytes, str,
+  int, float, complex, name constants (None, False, True), Ellipsis
+  and ast.Constant; not only str and int. For example, ``1.0`` is now ignored
+  in ``def f(): 1.0``.
 
 - Issue #4806: Avoid masking the original TypeError exception when using star
   (*) unpacking in function calls.  Based on patch by Hagen Fürstenau and
diff --git a/Python/compile.c b/Python/compile.c
index 84b79a2..ca1d865 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2619,33 +2619,13 @@
     switch (value->kind)
     {
     case Str_kind:
-    case Ellipsis_kind:
-        /* Issue #26204: ignore string statement, but don't emit a
-         * SyntaxWarning. Triple quoted strings is a common syntax for
-         * multiline comments.
-         *
-         * Don't emit warning on "def f(): ..." neither. It's a legit syntax
-         * for abstract function. */
-        return 1;
-
-    case Bytes_kind:
     case Num_kind:
+    case Ellipsis_kind:
+    case Bytes_kind:
     case NameConstant_kind:
     case Constant_kind:
-    {
-        PyObject *msg = PyUnicode_FromString("ignore constant statement");
-        if (msg == NULL)
-            return 0;
-        if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning,
-                                     msg,
-                                     c->c_filename, c->u->u_lineno,
-                                     NULL, NULL) == -1) {
-            Py_DECREF(msg);
-            return 0;
-        }
-        Py_DECREF(msg);
+        /* ignore constant statement */
         return 1;
-    }
 
     default:
         break;
