From 85dbc91ba730d28dc43c150f1d67629d06010938 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 7 Sep 2026 01:53:21 +0100 Subject: [PATCH 1/4] Fixed a test-related bugs and did a minor refactor --- .../api/LegacyIntegrationTests - C.test.ts | 2 +- .../api/LegacyIntegrationTests - CXX.test.ts | 8 +++-- .../weaver/cpp/results/Setters.js.windows.txt | 34 +++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 ClavaWeaver/resources/clava/test/weaver/cpp/results/Setters.js.windows.txt diff --git a/Clava-JS/api/LegacyIntegrationTests - C.test.ts b/Clava-JS/api/LegacyIntegrationTests - C.test.ts index ec85066b3..b50536fe8 100644 --- a/Clava-JS/api/LegacyIntegrationTests - C.test.ts +++ b/Clava-JS/api/LegacyIntegrationTests - C.test.ts @@ -104,7 +104,7 @@ describe("CTest", () => { await newTester().test("Detach.js", "detach.c"); }); - (isWindows ? it.skip : it)("InlineNasLu", async () => { + it.skipIf(isWindows)("InlineNasLu", async () => { await newTester() .checkExpectedOutput(false) .test("InlineNasLu.js", "inline_nas_lu.c"); diff --git a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts index 8fd880d59..2bdac9bb0 100644 --- a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts +++ b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts @@ -136,7 +136,7 @@ describe("CxxTest", () => { .test("ParamType.js", "param_type.cpp"); }); - (isWindows ? it.skip : it)("Wrap", async () => { + it.skipIf(isWindows)("Wrap", async () => { const tester = newTester().set( ClavaJavaTypes.CxxWeaverOption.PARSE_INCLUDES ); @@ -218,6 +218,10 @@ describe("CxxTest", () => { tester.setResultsFile("Setters.js.macos.txt"); } + if (isWindows) { + tester.setResultsFile("Setters.js.windows.txt"); + } + await tester.test("Setters.js", "setters.cpp"); }); @@ -538,7 +542,7 @@ describe("CxxApiTest", () => { }); }); -(isWindows ? describe.skip : describe)("CudaTest", () => { +describe.skipIf(isMacOS)("CudaTest", () => { function newTester() { const cudaTester = new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/weaver/"), diff --git a/ClavaWeaver/resources/clava/test/weaver/cpp/results/Setters.js.windows.txt b/ClavaWeaver/resources/clava/test/weaver/cpp/results/Setters.js.windows.txt new file mode 100644 index 000000000..85feaca2f --- /dev/null +++ b/ClavaWeaver/resources/clava/test/weaver/cpp/results/Setters.js.windows.txt @@ -0,0 +1,34 @@ +Original qualified name: std::chrono::steady_clock::now +Changed qualified name 1: now +Changed qualified name 2: std::now +Changed qualified name 3: std::chrono::_V2::system_clock::now +Changed then: +if(a == 0) { + a = 3; +} +else { + a = 2; +} + +Changed else: +if(a == 0) { + a = 3; +} +else { + a = 4; +} + +Changed condition: +if(a == 3) { + a = 3; +} +else { + a = 4; +} +Changed Function: +double testFunctionType(int a) { + + return 0; +} +Changed FunctionType: +double (int) \ No newline at end of file From b50b47f4c55e2afacb345c550581ef1c161d1ea3 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 7 Sep 2026 02:24:31 +0100 Subject: [PATCH 2/4] Fix cuda tests bug --- Clava-JS/api/LegacyIntegrationTests - CXX.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts index 2bdac9bb0..8bf9f35fe 100644 --- a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts +++ b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts @@ -546,7 +546,7 @@ describe.skipIf(isMacOS)("CudaTest", () => { function newTester() { const cudaTester = new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/weaver/"), - ClavaJavaTypes.Standard.CUDA + ClavaJavaTypes.Standard.CXX11 ) .setResultPackage("cuda/results") .setSrcPackage("cuda/src") From 33ffb1ca670eece443e6d80c79f5ea938a4ed5ee Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 7 Sep 2026 15:46:24 +0100 Subject: [PATCH 3/4] fix: make CUDA parsing work on Windows with the LLVM 18 dumper CUDA's headers select implementations from _MSC_VER. Clava defined _MSC_VER to 1, forcing the legacy MSVC paths in crt/math_functions.hpp (int-returning isinf/isnan, glibc-style __signbitl calls) that conflict with clang's __DEVICE__ declarations. Define a real MSVC version (1930) plus -D_NATIVE_WCHAR_T_DEFINED (keeps clang's builtin __stddef_wchar_t.h from typedef'ing wchar_t), -D_LIBCPP_OBJECT_FORMAT_COFF (clang's CUDA host pass defines __ELF__ on Windows, so libc++ missed the COFF guard and emitted an aligned_storage<..., 16384> above the 8192-byte Windows alignment cap) and -D_ALLOW_UNSUPPORTED_LIBCPP (CUDA's crt/host_defines.h rejects libc++ on x86-64). Drop -fms-compatibility (emulates pre-VS2015, making char16_t/char32_t non-keywords and breaking libc++ 18 headers) and the no-op -D_LIBCPP_MSVCRT. Also exclude Standard.CUDA from the '-std' fallback so passing the CUDA standard no longer resurrects the rejected '-std=cuda' flag, and give the CUDA legacy tests a 60s timeout: parsing the builtin CUDA resources regularly exceeds the 5s vitest default. --- .../fe/specs/clang/dumper/ClangAstDumper.java | 27 +++++++++++++++---- .../api/LegacyIntegrationTests - CXX.test.ts | 8 +++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java b/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java index fd2d6f4ef..5264ae8af 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java @@ -211,8 +211,9 @@ private ClangAstData parsePrivate(File sourceFile, String id, Standard standard, // Set standard to CUDA else if (isCuda) { // The LLVM 18 driver bundled with clang-dumper rejects '-std=cuda'. The .cu extension already - // selects CUDA mode, so use a C++ standard for host-side parsing. - arguments.add(standard.isCxx() ? standard.getFlag() : Standard.CXX17.getFlag()); + // selects CUDA mode, so use a C++ standard for host-side parsing. Standard.CUDA reports + // isCxx() == true, so exclude it explicitly, otherwise the flag would go back to '-std=cuda'. + arguments.add(standard.isCxx() && !standard.isCuda() ? standard.getFlag() : Standard.CXX17.getFlag()); } else { arguments.add(standard.getFlag()); } @@ -243,10 +244,26 @@ else if (isCuda) { else if (isCuda) { if (!SpecsPlatforms.isLinux()) { ClavaLog.info("We only officially support CUDA parsing in Linux, run at your own risk"); - arguments.add("-fms-compatibility"); if (SpecsPlatforms.isWindows()) { - arguments.add("-D_MSC_VER"); - arguments.add("-D_LIBCPP_MSVCRT"); + // The bundled clang-dumper ships MinGW/libc++ headers. CUDA's headers select their + // implementations from _MSC_VER: without a version >= 1800 they use legacy paths + // (int-returning isinf/isnan, glibc-style __signbitl) that conflict with clang's + // own __DEVICE__ declarations. A real MSVC version selects the modern paths. + arguments.add("-D_MSC_VER=1930"); + + // _MSC_VER alone makes clang's builtin __stddef_wchar_t.h typedef wchar_t, which is + // invalid in C++; this macro (predefined by real MSVC) keeps the header silent. + arguments.add("-D_NATIVE_WCHAR_T_DEFINED"); + + // Clang's CUDA host pass defines __ELF__ even on Windows targets, so libc++ + // misses _LIBCPP_OBJECT_FORMAT_COFF and emits an aligned_storage<..., 16384> + // specialization that exceeds clang's 8192-byte alignment cap on Windows. + arguments.add("-D_LIBCPP_OBJECT_FORMAT_COFF"); + + // CUDA's crt/host_defines.h hard-errors on libc++ + x86-64 unless this is defined. + arguments.add("-D_ALLOW_UNSUPPORTED_LIBCPP"); + } else { + arguments.add("-fms-compatibility"); } } diff --git a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts index 8bf9f35fe..7499d32d5 100644 --- a/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts +++ b/Clava-JS/api/LegacyIntegrationTests - CXX.test.ts @@ -546,7 +546,7 @@ describe.skipIf(isMacOS)("CudaTest", () => { function newTester() { const cudaTester = new ClavaLegacyTester( path.resolve("../ClavaWeaver/resources/clava/test/weaver/"), - ClavaJavaTypes.Standard.CXX11 + ClavaJavaTypes.Standard.CUDA ) .setResultPackage("cuda/results") .setSrcPackage("cuda/src") @@ -560,13 +560,13 @@ describe.skipIf(isMacOS)("CudaTest", () => { it("Cuda", async () => { await newTester().test("Cuda.js", "atomicAdd.cu"); - }); + }, 60_000); it("CudaMatrixMul", async () => { await newTester().test("CudaMatrixMul.js", "mult_matrix.cu"); - }); + }, 60_000); it("CudaQuery", async () => { await newTester().test("CudaQuery.js", "sample.cu"); - }); + }, 60_000); }); From bf55cb8a39690bb9a18092b85d0a6bc783811f82 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 8 Sep 2026 18:06:38 +0100 Subject: [PATCH 4/4] test: raise InlineNasLu timeout to 60s The test takes ~14s on macOS runners and has been timing out at the 10s limit in every CI run. --- Clava-JS/api/LegacyIntegrationTests - C.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Clava-JS/api/LegacyIntegrationTests - C.test.ts b/Clava-JS/api/LegacyIntegrationTests - C.test.ts index b50536fe8..2faee9a7b 100644 --- a/Clava-JS/api/LegacyIntegrationTests - C.test.ts +++ b/Clava-JS/api/LegacyIntegrationTests - C.test.ts @@ -108,7 +108,7 @@ describe("CTest", () => { await newTester() .checkExpectedOutput(false) .test("InlineNasLu.js", "inline_nas_lu.c"); - }, 10_000); + }, 60_000); it("InlineNasFt", async () => { await newTester()