[clang] [clang] Improve Ofast Warning (PR #183002)

Eli Friedman via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 7 14:10:43 PDT 2026


================
@@ -1,47 +1,56 @@
-// RUN: %clang -c -Ofast -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST %s
-// RUN: %clang -c -O2 -Ofast -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST %s
-// RUN: %clang -c -fno-fast-math -Ofast -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST %s
-// RUN: %clang -c -fno-strict-aliasing -Ofast -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST %s
-// RUN: %clang -c -fno-vectorize -Ofast -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST-NO-VECTORIZE %s
-// RUN: %clang -c -Ofast -O2 -### -Werror %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST-O2 \
-// RUN:  %if target={{.*-windows-msvc.*}} %{ --check-prefix=CHECK-OFAST-O2-ALIASING-MSVC %} \
-// RUN:  %else %{ --check-prefix=CHECK-OFAST-O2-ALIASING %} %s
-// RUN: %clang -c -Ofast -fno-fast-math -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST-NO-FAST-MATH %s
-// RUN: %clang -c -Ofast -fno-strict-aliasing -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST-NO-STRICT-ALIASING %s
-// RUN: %clang -c -Ofast -fno-vectorize -### %s 2>&1 | FileCheck -check-prefix=CHECK-OFAST-NO-VECTORIZE %s
-
-// CHECK-OFAST: use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations
-// CHECK-OFAST: -cc1
-// CHECK-OFAST: -Ofast
-// CHECK-OFAST-NOT: -relaxed-aliasing
-// CHECK-OFAST: -ffast-math
-// CHECK-OFAST: -vectorize-loops
-
-// Lack of warning about '-Ofast' deprecation is checked via -Werror
-// CHECK-OFAST-O2: -cc1
-// CHECK-OFAST-O2-NOT: -Ofast
-// CHECK-OFAST-O2-ALIASING-NOT: -relaxed-aliasing
-// CHECK-OFAST-O2-ALIASING-MSVC: -relaxed-aliasing
-// CHECK-OFAST-O2-NOT: -ffast-math
-// CHECK-OFAST-O2: -vectorize-loops
-
-// CHECK-OFAST-NO-FAST-MATH: use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations
-// CHECK-OFAST-NO-FAST-MATH: -cc1
-// CHECK-OFAST-NO-FAST-MATH: -Ofast
-// CHECK-OFAST-NO-FAST-MATH-NOT: -relaxed-aliasing
-// CHECK-OFAST-NO-FAST-MATH-NOT: -ffast-math
-// CHECK-OFAST-NO-FAST-MATH: -vectorize-loops
-
-// CHECK-OFAST-NO-STRICT-ALIASING: use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations
-// CHECK-OFAST-NO-STRICT-ALIASING: -cc1
-// CHECK-OFAST-NO-STRICT-ALIASING: -Ofast
-// CHECK-OFAST-NO-STRICT-ALIASING: -relaxed-aliasing
-// CHECK-OFAST-NO-STRICT-ALIASING: -ffast-math
-// CHECK-OFAST-NO-STRICT-ALIASING: -vectorize-loops
-
-// CHECK-OFAST-NO-VECTORIZE: use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations
-// CHECK-OFAST-NO-VECTORIZE: -cc1
-// CHECK-OFAST-NO-VECTORIZE: -Ofast
-// CHECK-OFAST-NO-VECTORIZE-NOT: -relaxed-aliasing
-// CHECK-OFAST-NO-VECTORIZE: -ffast-math
-// CHECK-OFAST-NO-VECTORIZE-NOT: -vectorize-loops
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -O2 -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -fno-fast-math -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -fno-strict-aliasing -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -fno-vectorize -Ofast -### %s 2>&1 | FileCheck -check-prefixes=NO-VECTORIZE,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -Ofast -O2 -### -Werror %s 2>&1 | FileCheck -check-prefixes=O2,O2-ALIASING %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -Ofast -fno-fast-math -### %s 2>&1 | FileCheck -check-prefixes=NO-FAST-MATH,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -Ofast -fno-strict-aliasing -### %s 2>&1 | FileCheck -check-prefixes=NO-STRICT-ALIASING,WARN-NO-WIN %s
+// RUN: %clang --target=x86_64-unknown-linux-gnu -c -Ofast -fno-vectorize -### %s 2>&1 | FileCheck -check-prefixes=NO-VECTORIZE,WARN-NO-WIN %s
+
+// RUN: %clang --target=x86_64-windows-msvc -c -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -O2 -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -fno-fast-math -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -fno-strict-aliasing -Ofast -### %s 2>&1 | FileCheck -check-prefixes=OFAST,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -fno-vectorize -Ofast -### %s 2>&1 | FileCheck -check-prefixes=NO-VECTORIZE,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -Ofast -O2 -### -Werror %s 2>&1 | FileCheck -check-prefixes=O2,O2-ALIASING-MSVC %s
+// RUN: %clang --target=x86_64-windows-msvc -c -Ofast -fno-fast-math -### %s 2>&1 | FileCheck -check-prefixes=NO-FAST-MATH,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -Ofast -fno-strict-aliasing -### %s 2>&1 | FileCheck -check-prefixes=NO-STRICT-ALIASING,WARN-WIN %s
+// RUN: %clang --target=x86_64-windows-msvc -c -Ofast -fno-vectorize -### %s 2>&1 | FileCheck -check-prefixes=NO-VECTORIZE,WARN-WIN %s
+
+
+// WARN-NO-WIN: use '-O3 -ffast-math -fstrict-aliasing' for the same behavior, or '-O3' to enable only conforming optimizations
+// WARN-WIN: use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations
----------------
efriedma-quic wrote:

Isn't this backwards?  (We want to show `-fstrict-aliasing` on Windows, right?)

https://github.com/llvm/llvm-project/pull/183002


More information about the cfe-commits mailing list