From 8740234d87b523b0c2ff423439aaf875d9d03fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Fri, 17 Feb 2023 11:56:43 +0000 Subject: [PATCH 01/30] Adds deps package for llvm14 --- deps/Findllvm14.cmake | 207 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 deps/Findllvm14.cmake diff --git a/deps/Findllvm14.cmake b/deps/Findllvm14.cmake new file mode 100644 index 000000000..0213aad29 --- /dev/null +++ b/deps/Findllvm14.cmake @@ -0,0 +1,207 @@ +cmake_minimum_required(VERSION 3.2) + +# Download library +deps_resolve("llvm14" LIB_DIR) + +# Expose LLVM library +set("llvm14_DIR" ${LIB_DIR}) + +# LLVM requires C++11 +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +if(UNIX) + # Unix version uses pre-build clang binaries, which disable rtti + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-rtti") +endif() + + +#LLVM and Clang includes +list(APPEND llvm14_INCLUDES + "${LIB_DIR}/src/include" + "${LIB_DIR}/build/include" +) + + +# LLVM + Clang libs +# Using link_directories because of circular dependencies in Clang libraries. +# Ideally we would use 'find_libraries' +LINK_DIRECTORIES("${LIB_DIR}/build/lib") + +set(LINKER_GROUP_START "-Wl,--start-group") +set(LINKER_GROUP_END "-Wl,--end-group") + +if(APPLE) + # Apple Clang linker does not understand groups + unset(LINKER_GROUP_START) + unset(LINKER_GROUP_END) +endif() + +#message("SYSTEM PROCESSOR: '${CMAKE_SYSTEM_PROCESSOR}'") +if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + set(PROCESSOR_PREFIX "ARM") +else() + set(PROCESSOR_PREFIX "X86") +endif() + + + +#find_libraries(llvm14_LIBRARIES "${LIB_DIR}/build/lib" +list(APPEND llvm14_LIBRARIES + + # Clang libraries, they have circular dependencies, so they are inside a group + ${LINKER_GROUP_START} + clangAnalysis + clangAPINotes + clangARCMigrate + clangAST + clangASTMatchers + clangBasic + #clangChangeNamespace + clangCodeGen + clangCrossTU + clangDependencyScanning + clangDirectoryWatcher + #clangDoc + clangDriver + clangDynamicASTMatchers + clangEdit + clangFormat + clangFrontend + clangFrontendTool + clangHandleCXX + clangHandleLLVM + clangIndex + clangIndexSerialization + clangLex + #clangMove + clangParse + #clangReorderFields + clangRewrite + clangRewriteFrontend + clangSema + clangSerialization + clangStaticAnalyzerCheckers + clangStaticAnalyzerCore + clangStaticAnalyzerFrontend + clangTooling + clangToolingASTDiff + clangToolingCore + clangToolingInclusions + clangToolingRefactoring + clangToolingSyntax + clangTransformer + #DynamicLibraryLib + ${LINKER_GROUP_END} + + # LLVM libraries, as given by 'llvm-config --libs' + LLVMWindowsManifest + LLVMXRay + LLVMLibDriver + LLVMDlltoolDriver + LLVMCoverage + LLVMLineEditor + LLVMXCoreDisassembler + LLVMXCoreCodeGen + LLVMXCoreDesc + LLVMXCoreInfo + LLVM${PROCESSOR_PREFIX}Disassembler + LLVM${PROCESSOR_PREFIX}AsmParser + LLVM${PROCESSOR_PREFIX}CodeGen + LLVM${PROCESSOR_PREFIX}Desc + LLVM${PROCESSOR_PREFIX}Info + LLVMARMUtils + LLVMAArch64Utils + LLVMOrcJIT + LLVMMCJIT + LLVMJITLink + LLVMOrcTargetProcess + LLVMOrcShared + LLVMInterpreter + LLVMExecutionEngine + LLVMRuntimeDyld + LLVMSymbolize + LLVMDebugInfoPDB + LLVMDebugInfoGSYM + LLVMOption + LLVMObjectYAML + LLVMMCA + LLVMMCDisassembler + LLVMLTO + LLVMPasses + LLVMCFGuard + LLVMCoroutines + LLVMObjCARCOpts + LLVMHelloNew + LLVMipo + LLVMVectorize + LLVMLinker + LLVMInstrumentation + LLVMFrontendOpenMP + LLVMFrontendOpenACC + LLVMExtensions + LLVMDWARFLinker + LLVMGlobalISel + LLVMMIRParser + LLVMAsmPrinter + LLVMDebugInfoDWARF + LLVMSelectionDAG + LLVMCodeGen + LLVMIRReader + LLVMAsmParser + LLVMInterfaceStub + LLVMFileCheck + LLVMFuzzMutate + LLVMTarget + LLVMScalarOpts + LLVMInstCombine + LLVMAggressiveInstCombine + LLVMTransformUtils + LLVMBitWriter + LLVMAnalysis + LLVMProfileData + LLVMObject + LLVMTextAPI + LLVMMCParser + LLVMMC + LLVMDebugInfoCodeView + LLVMDebugInfoMSF + LLVMBitReader + LLVMCore + LLVMRemarks + LLVMBitstreamReader + LLVMBinaryFormat + LLVMTableGen + LLVMSupport + LLVMDemangle +) + + + + +if(UNIX AND NOT APPLE) + # Generic UNIX dependencies + list(APPEND llvm14_LIBRARIES + rt + tinfo + z + m + dl + ) +elseif(APPLE) + # macOS dependencies + list(APPEND llvm14_LIBRARIES + c++abi + #stdc++ + z + m + dl + ncurses + ) +elseif(WIN32) + # Windows dependencies + list(APPEND llvm14_LIBRARIES + version + z + ) +endif() + From d8e14203177323822f0983672b2b5339132300c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Fri, 17 Feb 2023 12:00:02 +0000 Subject: [PATCH 02/30] [ClangAstDumper] Updates LLVM library from 12 to 14 --- ClangAstDumper/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ClangAstDumper/CMakeLists.txt b/ClangAstDumper/CMakeLists.txt index 46f65feab..3188a998c 100644 --- a/ClangAstDumper/CMakeLists.txt +++ b/ClangAstDumper/CMakeLists.txt @@ -14,7 +14,8 @@ include("../deps.cmake") # Add Modules #deps_find_package(llvm3.8 REQUIRED) # LLVM #deps_find_package(llvm7 REQUIRED) # LLVM -deps_find_package(llvm12 REQUIRED) # LLVM +#deps_find_package(llvm12 REQUIRED) # LLVM +deps_find_package(llvm14 REQUIRED) # LLVM set(COMMON_CXX_FLAGS "-std=c++14 -O3 -Wall -Wno-unused-function") #-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DVISIT_CHECK From 8eca095ce1f06659d384ccc67289943dcea9bc39 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Fri, 17 Feb 2023 17:45:11 +0000 Subject: [PATCH 03/30] [ClangASTDumper] Fix breaking changes caused by llvm version bump --- ClangAstDumper/ClangNodes.cpp | 9 +++++---- ClangAstDumper/ClavaDataDumperStmts.cpp | 10 +++------- ClangAstDumper/ClavaDataDumperTypes.cpp | 5 +++-- ClangAstDumper/main.cpp | 2 +- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ClangAstDumper/ClangNodes.cpp b/ClangAstDumper/ClangNodes.cpp index 1101bcf11..d440e706a 100644 --- a/ClangAstDumper/ClangNodes.cpp +++ b/ClangAstDumper/ClangNodes.cpp @@ -459,7 +459,10 @@ void clava::dump(NestedNameSpecifier* qualifier, int id) { void clava::dump(const TemplateArgument &templateArg, int id, ASTContext* Context) { + SmallString<0> str; + clava::dump(clava::TEMPLATE_ARG_KIND[templateArg.getKind()]); + switch (templateArg.getKind()) { case TemplateArgument::ArgKind::Type: clava::dump(clava::getId(templateArg.getAsType(), id)); @@ -475,10 +478,8 @@ void clava::dump(const TemplateArgument &templateArg, int id, ASTContext* Contex } break; case TemplateArgument::ArgKind::Integral: - //bool isSigned = templateArg.getAsIntegral().isSigned(); - clava::dump(templateArg.getAsIntegral().toString(10)); -// const std::string source = getSource(E); -// clava::dump(source); + templateArg.getAsIntegral().toString(str, 10); + clava::dump(str); break; case TemplateArgument::ArgKind::Template: clava::dump(templateArg.getAsTemplate(), id, Context); diff --git a/ClangAstDumper/ClavaDataDumperStmts.cpp b/ClangAstDumper/ClavaDataDumperStmts.cpp index 8371ffe6e..a9201e425 100644 --- a/ClangAstDumper/ClavaDataDumperStmts.cpp +++ b/ClangAstDumper/ClavaDataDumperStmts.cpp @@ -386,15 +386,11 @@ void clava::ClavaDataDumper::DumpCharacterLiteralData(const CharacterLiteral *E) void clava::ClavaDataDumper::DumpIntegerLiteralData(const IntegerLiteral *E) { DumpLiteralData(E); -// DumpExprData(E); - -// clava::dump(clava::getSource(Context, E->getSourceRange())); - bool isSigned = E->getType()->isSignedIntegerType(); -// const std::string source = getSource(E); -// clava::dump(source); - clava::dump(E->getValue().toString(10, isSigned)); + SmallString<0> str; + E->getValue().toString(str, 10, isSigned); + clava::dump(str); /* const SourceManager &sm = Context->getSourceManager(); diff --git a/ClangAstDumper/ClavaDataDumperTypes.cpp b/ClangAstDumper/ClavaDataDumperTypes.cpp index 88f7215e3..2e37d4d5c 100644 --- a/ClangAstDumper/ClavaDataDumperTypes.cpp +++ b/ClangAstDumper/ClavaDataDumperTypes.cpp @@ -454,8 +454,9 @@ void clava::ClavaDataDumper::DumpConstantArrayTypeData(const ConstantArrayType * DumpArrayTypeData(T); //clava::dump(T->getSize().VAL); - clava::dump(T->getSize().toString(10, false)); - + SmallString<0> str; + T->getSize().toString(str, 10, false); + clava::dump(str); } void clava::ClavaDataDumper::DumpVariableArrayTypeData(const VariableArrayType *T) { diff --git a/ClangAstDumper/main.cpp b/ClangAstDumper/main.cpp index a7095fd44..e95602077 100644 --- a/ClangAstDumper/main.cpp +++ b/ClangAstDumper/main.cpp @@ -24,7 +24,7 @@ int main(int argc, const char *argv[]) // but could not detect a significant difference //llvm::errs().SetBuffered(); - CommonOptionsParser OptionsParser(argc, argv, MyToolCategory); + CommonOptionsParser& OptionsParser = CommonOptionsParser::create(argc, argv, MyToolCategory).get(); ClangTool Tool(OptionsParser.getCompilations(), OptionsParser.getSourcePathList()); From 53ebed1e1bf2cde63b502a5e8784f944fa619a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sat, 18 Feb 2023 18:50:23 +0000 Subject: [PATCH 04/30] [deps] Updates LLVM libraries in llvm14 package --- deps/Findllvm14.cmake | 152 ++++++++++++++++++++---------------------- 1 file changed, 73 insertions(+), 79 deletions(-) diff --git a/deps/Findllvm14.cmake b/deps/Findllvm14.cmake index 0213aad29..df2d26680 100644 --- a/deps/Findllvm14.cmake +++ b/deps/Findllvm14.cmake @@ -94,85 +94,79 @@ list(APPEND llvm14_LIBRARIES ${LINKER_GROUP_END} # LLVM libraries, as given by 'llvm-config --libs' - LLVMWindowsManifest - LLVMXRay - LLVMLibDriver - LLVMDlltoolDriver - LLVMCoverage - LLVMLineEditor - LLVMXCoreDisassembler - LLVMXCoreCodeGen - LLVMXCoreDesc - LLVMXCoreInfo - LLVM${PROCESSOR_PREFIX}Disassembler - LLVM${PROCESSOR_PREFIX}AsmParser - LLVM${PROCESSOR_PREFIX}CodeGen - LLVM${PROCESSOR_PREFIX}Desc - LLVM${PROCESSOR_PREFIX}Info - LLVMARMUtils - LLVMAArch64Utils - LLVMOrcJIT - LLVMMCJIT - LLVMJITLink - LLVMOrcTargetProcess - LLVMOrcShared - LLVMInterpreter - LLVMExecutionEngine - LLVMRuntimeDyld - LLVMSymbolize - LLVMDebugInfoPDB - LLVMDebugInfoGSYM - LLVMOption - LLVMObjectYAML - LLVMMCA - LLVMMCDisassembler - LLVMLTO - LLVMPasses - LLVMCFGuard - LLVMCoroutines - LLVMObjCARCOpts - LLVMHelloNew - LLVMipo - LLVMVectorize - LLVMLinker - LLVMInstrumentation - LLVMFrontendOpenMP - LLVMFrontendOpenACC - LLVMExtensions - LLVMDWARFLinker - LLVMGlobalISel - LLVMMIRParser - LLVMAsmPrinter - LLVMDebugInfoDWARF - LLVMSelectionDAG - LLVMCodeGen - LLVMIRReader - LLVMAsmParser - LLVMInterfaceStub - LLVMFileCheck - LLVMFuzzMutate - LLVMTarget - LLVMScalarOpts - LLVMInstCombine - LLVMAggressiveInstCombine - LLVMTransformUtils - LLVMBitWriter - LLVMAnalysis - LLVMProfileData - LLVMObject - LLVMTextAPI - LLVMMCParser - LLVMMC - LLVMDebugInfoCodeView - LLVMDebugInfoMSF - LLVMBitReader - LLVMCore - LLVMRemarks - LLVMBitstreamReader - LLVMBinaryFormat - LLVMTableGen - LLVMSupport - LLVMDemangle + LLVMWindowsManifest + LLVMXRay + LLVMLibDriver + LLVMDlltoolDriver + LLVMCoverage + LLVMLineEditor + LLVM${PROCESSOR_PREFIX}Disassembler + LLVM${PROCESSOR_PREFIX}AsmParser + LLVM${PROCESSOR_PREFIX}CodeGen + LLVM${PROCESSOR_PREFIX}Desc + LLVM${PROCESSOR_PREFIX}Info + LLVMOrcJIT + LLVMMCJIT + LLVMJITLink + LLVMInterpreter + LLVMExecutionEngine + LLVMRuntimeDyld + LLVMOrcTargetProcess + LLVMOrcShared + LLVMDWP + LLVMSymbolize + LLVMDebugInfoPDB + LLVMDebugInfoGSYM + LLVMOption + LLVMObjectYAML + LLVMMCA + LLVMMCDisassembler + LLVMLTO + LLVMPasses + LLVMCFGuard + LLVMCoroutines + LLVMObjCARCOpts + LLVMipo + LLVMVectorize + LLVMLinker + LLVMInstrumentation + LLVMFrontendOpenMP + LLVMFrontendOpenACC + LLVMExtensions + LLVMDWARFLinker + LLVMGlobalISel + LLVMMIRParser + LLVMAsmPrinter + LLVMDebugInfoMSF + LLVMSelectionDAG + LLVMCodeGen + LLVMIRReader + LLVMAsmParser + LLVMInterfaceStub + LLVMFileCheck + LLVMFuzzMutate + LLVMTarget + LLVMScalarOpts + LLVMInstCombine + LLVMAggressiveInstCombine + LLVMTransformUtils + LLVMBitWriter + LLVMAnalysis + LLVMProfileData + LLVMDebugInfoDWARF + LLVMObject + LLVMTextAPI + LLVMMCParser + LLVMMC + LLVMDebugInfoCodeView + LLVMBitReader + LLVMCore + LLVMRemarks + LLVMBitstreamReader + LLVMBinaryFormat + LLVMTableGen + LLVMSupport + LLVMDemangle ) From 3984f8ac3f1257e056ab15c2e11401ae53376347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sat, 18 Feb 2023 21:54:24 +0000 Subject: [PATCH 05/30] [ClangAstDumper] Fixes use of Expected in main.cpp --- ClangAstDumper/main.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ClangAstDumper/main.cpp b/ClangAstDumper/main.cpp index e95602077..bffb85f91 100644 --- a/ClangAstDumper/main.cpp +++ b/ClangAstDumper/main.cpp @@ -23,10 +23,21 @@ int main(int argc, const char *argv[]) // Errs is the main way we dump information, we tested if making it buffered improved performance // but could not detect a significant difference //llvm::errs().SetBuffered(); + auto OptionsParser = CommonOptionsParser::create(argc, argv, MyToolCategory); + if (auto E = OptionsParser.takeError()) { + // We must consume the error. Typically one of: + // - return the error to our caller + // - toString(), when logging + // - consumeError(), to silently swallow the error + // - handleErrors(), to distinguish error types + llvm::errs() << "Problem while creating options parser: " << toString(std::move(E)) << "\n"; + return -1; + } + + //CommonOptionsParser OptionsParser = *parserResult; + ClangTool Tool((*OptionsParser).getCompilations(), + (*OptionsParser).getSourcePathList()); - CommonOptionsParser& OptionsParser = CommonOptionsParser::create(argc, argv, MyToolCategory).get(); - ClangTool Tool(OptionsParser.getCompilations(), - OptionsParser.getSourcePathList()); /* for(auto source : OptionsParser.getSourcePathList()) { From 5bd8951860b31c5b74bd003978bca2289c5ede69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sat, 18 Feb 2023 23:02:54 +0000 Subject: [PATCH 06/30] [ClangAstDumper] Updates method for generating enums --- ClangAstDumper/clang_enums/CMakeLists.txt | 15 +- ClangAstDumper/clang_enums/ClangEnum.js | 121 ++++++ ClangAstDumper/clang_enums/ClangEnum.lara | 95 ----- ClangAstDumper/clang_enums/ClangEnums.js | 378 ++++++++++++++++++ ClangAstDumper/clang_enums/ClangEnums.lara | 235 ----------- .../clang_enums/ClangEnumsGenerator.lara | 43 -- ClangAstDumper/clang_enums/ExtractEnums.cmake | 29 -- ClangAstDumper/clang_enums/Extractors.js | 102 +++++ ClangAstDumper/clang_enums/HeaderEnums.js | 169 ++++++++ ClangAstDumper/clang_enums/HeaderEnums.lara | 86 ---- ClangAstDumper/clang_enums/Main.js | 124 ++++++ ClangAstDumper/clang_enums/config.clava | 236 +++++++++++ 12 files changed, 1141 insertions(+), 492 deletions(-) create mode 100644 ClangAstDumper/clang_enums/ClangEnum.js delete mode 100644 ClangAstDumper/clang_enums/ClangEnum.lara create mode 100644 ClangAstDumper/clang_enums/ClangEnums.js delete mode 100644 ClangAstDumper/clang_enums/ClangEnums.lara delete mode 100644 ClangAstDumper/clang_enums/ClangEnumsGenerator.lara delete mode 100644 ClangAstDumper/clang_enums/ExtractEnums.cmake create mode 100644 ClangAstDumper/clang_enums/Extractors.js create mode 100644 ClangAstDumper/clang_enums/HeaderEnums.js delete mode 100644 ClangAstDumper/clang_enums/HeaderEnums.lara create mode 100644 ClangAstDumper/clang_enums/Main.js create mode 100644 ClangAstDumper/clang_enums/config.clava diff --git a/ClangAstDumper/clang_enums/CMakeLists.txt b/ClangAstDumper/clang_enums/CMakeLists.txt index 488c06f3e..b1238cb14 100644 --- a/ClangAstDumper/clang_enums/CMakeLists.txt +++ b/ClangAstDumper/clang_enums/CMakeLists.txt @@ -7,10 +7,11 @@ include("../../deps.cmake") # Add Modules #deps_find_package(llvm3.8 REQUIRED) # LLVM #deps_find_package(llvm7 REQUIRED) # LLVM -deps_find_package(llvm12 REQUIRED) # LLVM +#deps_find_package(llvm12 REQUIRED) # LLVM +deps_find_package(llvm14 REQUIRED) # LLVM # Set base llvm dir -set(LLVM_DIR ${llvm12_DIR}) +set(LLVM_DIR ${llvm14_DIR}) set(COMMON_CXX_FLAGS "-O3 -Wall -Wno-unused-function") @@ -19,13 +20,19 @@ find_package(Clava REQUIRED) message(STATUS "LLVM DIR: ${LLVM_DIR}") +# Create target for clang/AST/Type.h +add_library(EnumGen) + +clava_weave(EnumGen "Main.js" ARGS "llvmFolder:'${LLVM_DIR}', outputFolder:'${CMAKE_CURRENT_LIST_DIR}/..'" JAVA_FLAGS -Xmx8000m) + + # Make enum extractor available -include(${CMAKE_CURRENT_LIST_DIR}/ExtractEnums.cmake) +#include(${CMAKE_CURRENT_LIST_DIR}/ExtractEnums.cmake) #extract_enums("${LLVM_DIR}/src/include/clang/AST" "Type.h") #extract_enums("${LLVM_DIR}/src/include/clang/AST" "OperationKinds.h") #extract_enums("${LLVM_DIR}/src/include/clang/Basic" "AttrKinds.h") -extract_enums("${LLVM_DIR}/src/include/clang/Basic" "Specifiers.h") +#extract_enums("${LLVM_DIR}/src/include/clang/Basic" "Specifiers.h") #extract_enums("${LLVM_DIR}/src/include/clang/Basic" "ExceptionSpecificationType.h") #extract_enums("${LLVM_DIR}/src/include/clang/Basic" "Linkage.h") #extract_enums("${LLVM_DIR}/src/include/clang/Basic" "Visibility.h") diff --git a/ClangAstDumper/clang_enums/ClangEnum.js b/ClangAstDumper/clang_enums/ClangEnum.js new file mode 100644 index 000000000..e641c7cd6 --- /dev/null +++ b/ClangAstDumper/clang_enums/ClangEnum.js @@ -0,0 +1,121 @@ +laraImport("weaver.Query"); +laraImport("Extractors"); + +/** + * @class + */ +class ClangEnum { + constructor(name, cppVarName, mapper, excludeArray, className) { + this.name = name; + this.cppVarName = cppVarName; + + if (mapper === undefined) { + mapper = (element) => element; + } + this.mapper = mapper; + + if (excludeArray === undefined) { + excludeArray = []; + } + this.excludeSet = new StringSet(excludeArray); + //println("Exclude set: " + this.excludeSet.values()); + + this.className = className; + + this.enumValues = undefined; + + /* + if (extractor == undefined) { + extractor = Extractors.simpleExtractor; + } + this.extractor = extractor; + */ + this.extractor = Extractors.simpleExtractor; + this.occurence = 1; + } + + setOccurence(occurence) { + this.occurence = occurence; + return this; + } + + getEnumName() { + return this.name; + } + + getCompleteEnumName() { + if (this.className === undefined) { + return this.name; + } + + return this.className + "_" + this.name; + } + + getClassName() { + return this.className; + } + + /* +ClangEnum.prototype.getStartingNode = function() { + if(this.className === undefined) { + return Query.root(); + } + + var startingClass = Query.search("class", this.className).first(); + + if(startingClass === undefined) { + throw new Error("Clang enum specifies class '"+this.className+"', but it could not be found"); + } + + return startingClass; +} +*/ + + setEnumValues(headerLines) { + this.enumValues = this.extractor(this.name, headerLines, this.occurence); + } + + /* + setEnumValues(enumValues) { + if (this.enumValues !== undefined) { + println("Setting enum values again for enum " + this.name); + } + + this.enumValues = enumValues; + } + */ + + getCode() { + if (this.enumValues === undefined) { + println("No enum values set for enum '" + this.name + "'"); + return undefined; + } + + var code = ""; + + code += "extern const std::string clava::" + this.cppVarName + "[] = {\n"; + + for (var enumValue of this.enumValues) { + //println("Enum: " + enumValue); + if (this.excludeSet.has(enumValue.toString())) { + println("Excluded enum '" + enumValue + "'"); + continue; + } + + // Map enum value + enumValue = this.mapper(enumValue); + + code += ' "' + enumValue + '",\n'; + } + + code += "};\n"; + + return code; + } + + getEnumValues() { + return this.enumValues + .filter((e) => !this.excludeSet.has(e.toString())) + .map(this.mapper); + } +} diff --git a/ClangAstDumper/clang_enums/ClangEnum.lara b/ClangAstDumper/clang_enums/ClangEnum.lara deleted file mode 100644 index 5354bb71b..000000000 --- a/ClangAstDumper/clang_enums/ClangEnum.lara +++ /dev/null @@ -1,95 +0,0 @@ -import weaver.Query; - -/** - * @class - */ -var ClangEnum = function(name, cppVarName, mapper, excludeArray, className) { - this.name = name; - this.cppVarName = cppVarName; - - if(mapper === undefined) { - mapper = element => element; - } - this.mapper = mapper; - - - if(excludeArray === undefined) { - excludeArray = []; - } - this.excludeSet = new StringSet(excludeArray); - //println("Exclude set: " + this.excludeSet.values()); - - this.className = className; - - this.enumValues = undefined; -}; - -ClangEnum.prototype.getEnumName = function() { - return this.name; -} - -ClangEnum.prototype.getCompleteEnumName = function() { - if(this.className === undefined) { - return this.name; - } - - return this.className + "_" + this.name; -} - -ClangEnum.prototype.getClassName = function() { - return this.className; -} - -/* -ClangEnum.prototype.getStartingNode = function() { - if(this.className === undefined) { - return Query.root(); - } - - var startingClass = Query.search("class", this.className).first(); - - if(startingClass === undefined) { - throw new Error("Clang enum specifies class '"+this.className+"', but it could not be found"); - } - - return startingClass; -} -*/ - -ClangEnum.prototype.setEnumValues = function(enumValues) { - if(this.enumValues !== undefined) { - println("Setting enum values again for enum " + this.name); - } - - this.enumValues = enumValues; -} - - -ClangEnum.prototype.getCode = function() { - if(this.enumValues === undefined) { - println("No enum values set for enum '"+this.name+"'"); - return undefined; - } - - - var code = ""; - - code += "extern const std::string clava::"+this.cppVarName+"[] = {\n"; - - for(var enumValue of this.enumValues) { - //println("Enum: " + enumValue); - if(this.excludeSet.has(enumValue.toString())) { - println("Excluded enum '"+enumValue+"'"); - continue; - } - - // Map enum value - enumValue = this.mapper(enumValue); - - code += ' "' + enumValue + '",\n'; - } - - code += "};\n"; - - return code; -} \ No newline at end of file diff --git a/ClangAstDumper/clang_enums/ClangEnums.js b/ClangAstDumper/clang_enums/ClangEnums.js new file mode 100644 index 000000000..b8304e86a --- /dev/null +++ b/ClangAstDumper/clang_enums/ClangEnums.js @@ -0,0 +1,378 @@ +laraImport("HeaderEnums"); +laraImport("ClangEnum"); +laraImport("weaver.Query"); + +/** + * @class + */ +class ClangEnums { + static _TYPE_H = new HeaderEnums("src/include/clang/AST/Type.h", [ + new ClangEnum("Kind", "BUILTIN_KIND", undefined, ["LastKind"]).setOccurence( + 3 + ), + new ClangEnum( + "RefQualifierKind", + "REFERENCE_QUALIFIER", + (value) => ClangEnums._removePrefix(value, "RQ_"), + undefined + ), + new ClangEnum( + "ArraySizeModifier", + "ARRAY_SIZE_MODIFIER", + undefined, + undefined + ), + new ClangEnum("UTTKind", "UTT_KIND", undefined, undefined), + new ClangEnum( + "ElaboratedTypeKeyword", + "ELABORATED_TYPE_KEYWORD", + (value) => ClangEnums._removePrefix(value, "ETK_"), + undefined + ), + new ClangEnum( + "TagTypeKind", + "TAG_KIND", + (value) => ClangEnums._removePrefix(value, "TTK_"), + undefined + ), + ]); + + static _OPERATIONS_KINDS_H = new HeaderEnums( + "src/include/clang/AST/OperationKinds.h", + [ + new ClangEnum( + "CastKind", + "CAST_KIND", + (value) => ClangEnums._removePrefix(value, "CK_"), + undefined + ), + new ClangEnum( + "BinaryOperatorKind", + "BINARY_OPERATOR_KIND", + (value) => ClangEnums._removePrefix(value, "BO_"), + undefined + ), + new ClangEnum( + "UnaryOperatorKind", + "UNARY_OPERATOR_KIND", + (value) => ClangEnums._removePrefix(value, "UO_"), + undefined + ), + ] + ); + + static _ATTR_KINDS_H = new HeaderEnums( + "src/include/clang/Basic/AttrKinds.h", + [new ClangEnum("Kind", "ATTRIBUTES", undefined, undefined)] + ); + + static _SPECIFIERS_H = new HeaderEnums( + "src/include/clang/Basic/Specifiers.h", + [ + new ClangEnum( + "CallingConv", + "CALLING_CONVENTION", + (value) => ClangEnums._removePrefix(value, "CC_"), + undefined + ), + new ClangEnum( + "AccessSpecifier", + "ACCESS_SPECIFIER", + (value) => ClangEnums._removePrefix(value, "AS_").toUpperCase(), + undefined + ), + new ClangEnum( + "StorageClass", + "STORAGE_CLASS", + (value) => ClangEnums._removePrefix(value, "SC_"), + undefined + ), + new ClangEnum( + "ExplicitSpecKind", + "EXPLICIT_SPEC_KIND", + undefined, + undefined + ), + new ClangEnum( + "TemplateSpecializationKind", + "TEMPLATE_SPECIALIZATION_KIND", + (value) => ClangEnums._removePrefix(value, "TSK_"), + undefined + ), + ] + ); + + static _EXCEPTION_SPECIFICATION_TYPE_H = new HeaderEnums( + "src/include/clang/Basic/ExceptionSpecificationType.h", + [ + new ClangEnum( + "ExceptionSpecificationType", + "EXCEPTION_SPECIFICATION_TYPE", + (value) => ClangEnums._removePrefix(value, "EST_"), + undefined + ), + ] + ); + + static _LINKAGE_H = new HeaderEnums("src/include/clang/Basic/Linkage.h", [ + new ClangEnum( + "Linkage", + "LINKAGE", + (value) => ClangEnums._removePrefix(value, "EST_"), + undefined + ), + ]); + + static _VISIBILITY_H = new HeaderEnums( + "src/include/clang/Basic/Visibility.h", + [ + new ClangEnum( + "Visibility", + "VISIBILITY", + (value) => ClangEnums._removeSuffix(value, "Visibility"), + undefined + ), + ] + ); + + static _TEMPLATE_BASE_H = new HeaderEnums( + "src/include/clang/AST/TemplateBase.h", + [new ClangEnum("ArgKind", "TEMPLATE_ARG_KIND", undefined, undefined)] + ); + + static _DECL_H = new HeaderEnums("src/include/clang/AST/Decl.h", [ + new ClangEnum( + "InitializationStyle", + "INIT_STYLE", + (value) => ClangEnums._INIT_STYLE_ENUMS[value], + undefined + ), + new ClangEnum( + "TLSKind", + "TLS_KIND", + (value) => ClangEnums._removePrefix(value, "TLS_").toUpperCase(), + undefined + ), + ]); + + static _INIT_STYLE_ENUMS = { + CInit: "CINIT", + CallInit: "CALL_INIT", + ListInit: "LIST_INIT", + }; + + static _EXPR_CXX_H = new HeaderEnums("src/include/clang/AST/ExprCXX.h", [ + new ClangEnum( + "InitializationStyle", + "NEW_INIT_STYLE", + (value) => ClangEnums._NEW_INIT_STYLE_ENUMS[value], + undefined + ).setOccurence(2), + new ClangEnum( + "ConstructionKind", + "CONSTRUCTION_KIND", + (value) => ClangEnums._removePrefix(value, "CK_"), + undefined + ), + ]); + + static _NEW_INIT_STYLE_ENUMS = { + NoInit: "NO_INIT", + CallInit: "CALL_INIT", + ListInit: "LIST_INIT", + }; + + static _TYPE_TRAITS_H = new HeaderEnums( + "src/include/clang/Basic/TypeTraits.h", + [ + new ClangEnum( + "UnaryExprOrTypeTrait", + "UETT_KIND", + (value) => ClangEnums._removePrefix(value, "UETT_"), + ["UETT_Last"] + ), + ] + ); + + static _NESTED_NAME_SPECIFIER_H = new HeaderEnums( + "src/include/clang/AST/NestedNameSpecifier.h", + [ + new ClangEnum( + "SpecifierKind", + "NESTED_NAMED_SPECIFIER", + undefined, + undefined + ), + ] + ); + + static _DECL_CXX_H = new HeaderEnums("src/include/clang/AST/DeclCxx.h", [ + new ClangEnum( + "LanguageIDs", + "LINKAGE_LANGUAGE", + (value) => ClangEnums._removePrefix(value, "lang_").toUpperCase(), + undefined + ), + ]); + + static _LAMBDA_H = new HeaderEnums("src/include/clang/Basic/Lambda.h", [ + new ClangEnum( + "LambdaCaptureDefault", + "LAMBDA_CAPTURE_DEFAULT", + (value) => ClangEnums._removePrefix(value, "LCD_"), + undefined + ), + new ClangEnum( + "LambdaCaptureKind", + "LAMBDA_CAPTURE_KIND", + (value) => ClangEnums._removePrefix(value, "LCK_"), + undefined + ), + ]); + + static _TEMPLATE_NAME_H = new HeaderEnums( + "src/include/clang/AST/TemplateName.h", + [new ClangEnum("NameKind", "TEMPLATE_NAME_KIND", undefined, undefined)] + ); + + static _ATTR_H = new HeaderEnums("src/include/clang/AST/Attr.h", [ + new ClangEnum( + "VisibilityType", + "VISIBILITY_ATTR_TYPE", + undefined, + undefined + ), + ]); + + static _EXPR_H = new HeaderEnums("src/include/clang/AST/Expr.h", [ + new ClangEnum( + "Kind", + "OFFSET_OF_NODE_KIND", + (value) => value.toUpperCase(), + undefined, + "OffsetOfNode" + ).setOccurence(10), + new ClangEnum( + "IdentKind", + "PREDEFINED_ID_TYPE", + undefined, + undefined, + "PredefinedExpr" + ), + new ClangEnum( + "StringKind", + "STRING_KIND", + (value) => value.toUpperCase(), + undefined + ), + //new ClangEnum('Kind', 'DESIGNATOR_KIND', undefined, undefined, 'Designator') + ]); + + /** + + + + +- clang/Ast/Expr.h +Kind, OFFSET_OF_NODE_KIND (class OffsetOfNode) +IdentKind, PREDEFINED_ID_TYPE +StringKind, STRING_KIND +Kind, DESIGNATOR_KIND (class Designator) + + + */ + + static _HEADERS = [ + ClangEnums._TYPE_H, + ClangEnums._OPERATIONS_KINDS_H, + ClangEnums._ATTR_KINDS_H, + ClangEnums._SPECIFIERS_H, + ClangEnums._EXCEPTION_SPECIFICATION_TYPE_H, + ClangEnums._LINKAGE_H, + ClangEnums._VISIBILITY_H, + ClangEnums._TEMPLATE_BASE_H, + ClangEnums._DECL_H, + ClangEnums._EXPR_CXX_H, + ClangEnums._TYPE_TRAITS_H, + ClangEnums._NESTED_NAME_SPECIFIER_H, + ClangEnums._DECL_CXX_H, + ClangEnums._LAMBDA_H, + ClangEnums._TEMPLATE_NAME_H, + ClangEnums._ATTR_H, + ClangEnums._EXPR_H, + ]; + + static getHeader = function (headerFilename) { + if (ClangEnums._HEADER_MAP === undefined) { + ClangEnums._HEADER_MAP = ClangEnums.buildHeaderMap(); + } + + return ClangEnums._HEADER_MAP[headerFilename]; + }; + + static buildHeaderMap = function () { + var map = {}; + + for (var header of ClangEnums._HEADERS) { + map[header.getName()] = header; + } + //println("Header map"); + //printlnObject(map); + return map; + }; + + /** + * Mappers + */ + static _removePrefix = function (enumValue, prefix) { + if (enumValue.startsWith(prefix)) { + enumValue = enumValue.substring(prefix.length); + } + + return enumValue; + }; + + static _removeSuffix = function (enumValue, suffix) { + if (enumValue.endsWith(suffix)) { + enumValue = enumValue.substring(0, enumValue.length - suffix.length); + } + + return enumValue; + }; + + /* +ClangEnums._refQualMapper = function(enumValue) { +//println("MAPPER FOR " + enumValue); + if(enumValue.startsWith("RQ_")) { +// println("Starts with RQ_"); + enumValue = enumValue.substring(3); + } +// println("RETURNING: " + enumValue); + return enumValue; +} +*/ + /* +ClangEnums._elaboratedTypeKeyworkMapper = function(enumValue) { + + if(enumValue.startsWith("ETK_")) { + enumValue = enumValue.substring(4); + } + + enumValue = enumValue.toUpperCase(); + + return enumValue; +} +*/ + /* +ClangEnums._tagKindMapperMapper = function(enumValue) { + + if(enumValue.startsWith("TTK_")) { + enumValue = enumValue.substring(4); + } + + enumValue = enumValue.toUpperCase(); + + return enumValue; +} +*/ +} diff --git a/ClangAstDumper/clang_enums/ClangEnums.lara b/ClangAstDumper/clang_enums/ClangEnums.lara deleted file mode 100644 index 24657d9a4..000000000 --- a/ClangAstDumper/clang_enums/ClangEnums.lara +++ /dev/null @@ -1,235 +0,0 @@ -import HeaderEnums; -import ClangEnum; - -/** - * @class - */ -var ClangEnums = {}; - - - - -ClangEnums._TYPE_H = new HeaderEnums('Type.h', [ - new ClangEnum('Kind', 'BUILTIN_KIND', undefined, ["LastKind"]), - new ClangEnum('RefQualifierKind', 'REFERENCE_QUALIFIER', value => ClangEnums._removePrefix(value, "RQ_"), undefined), - new ClangEnum('ArraySizeModifier', 'ARRAY_SIZE_MODIFIER', undefined, undefined), - new ClangEnum('UTTKind', 'UTT_KIND', undefined, undefined), - new ClangEnum('ElaboratedTypeKeyword', 'ELABORATED_TYPE_KEYWORD', value => ClangEnums._removePrefix(value, "ETK_"), undefined), - new ClangEnum('TagTypeKind', 'TAG_KIND', value => ClangEnums._removePrefix(value, "TTK_"), undefined) -]); - - -ClangEnums._OPERATIONS_KINDS_H = new HeaderEnums('OperationKinds.h', [ - new ClangEnum('CastKind', 'CAST_KIND', value => ClangEnums._removePrefix(value, "CK_"), undefined), - new ClangEnum('BinaryOperatorKind', 'BINARY_OPERATOR_KIND', value => ClangEnums._removePrefix(value, "BO_"), undefined), - new ClangEnum('UnaryOperatorKind', 'UNARY_OPERATOR_KIND', value => ClangEnums._removePrefix(value, "UO_"), undefined) -]); - - -ClangEnums._ATTR_KINDS_H = new HeaderEnums('AttrKinds.h', [ - new ClangEnum('Kind', 'ATTRIBUTES', undefined, undefined) -]); - - -ClangEnums._SPECIFIERS_H = new HeaderEnums('Specifiers.h', [ - new ClangEnum('CallingConv', 'CALLING_CONVENTION', value => ClangEnums._removePrefix(value, "CC_"), undefined), - new ClangEnum('AccessSpecifier', 'ACCESS_SPECIFIER', (value => ClangEnums._removePrefix(value, "AS_").toUpperCase()), undefined), - new ClangEnum('StorageClass', 'STORAGE_CLASS', value => ClangEnums._removePrefix(value, "SC_"), undefined), - new ClangEnum('ExplicitSpecKind', 'EXPLICIT_SPEC_KIND', undefined, undefined), - new ClangEnum('TemplateSpecializationKind', 'TEMPLATE_SPECIALIZATION_KIND', value => ClangEnums._removePrefix(value, "TSK_"), undefined), -]); - - - -ClangEnums._EXCEPTION_SPECIFICATION_TYPE_H = new HeaderEnums('ExceptionSpecificationType.h', [ - new ClangEnum('ExceptionSpecificationType', 'EXCEPTION_SPECIFICATION_TYPE', (value => ClangEnums._removePrefix(value, "EST_")), undefined) -]); - -ClangEnums._LINKAGE_H = new HeaderEnums('Linkage.h', [ - new ClangEnum('Linkage', 'LINKAGE', (value => ClangEnums._removePrefix(value, "EST_")), undefined) -]); - -ClangEnums._VISIBILITY_H = new HeaderEnums('Visibility.h', [ - new ClangEnum('Visibility', 'VISIBILITY', (value => ClangEnums._removeSuffix(value, "Visibility")), undefined) -]); - -ClangEnums._TEMPLATE_BASE_H = new HeaderEnums('TemplateBase.h', [ - new ClangEnum('ArgKind', 'TEMPLATE_ARG_KIND', undefined, undefined) -]); - -ClangEnums._DECL_H = new HeaderEnums('Decl.h', [ - new ClangEnum('InitializationStyle', 'INIT_STYLE', (value => ClangEnums._INIT_STYLE_ENUMS[value]), undefined), - new ClangEnum('TLSKind', 'TLS_KIND', (value => ClangEnums._removePrefix(value, "TLS_").toUpperCase()), undefined) -]); - -ClangEnums._INIT_STYLE_ENUMS = { - CInit: "CINIT", - CallInit: "CALL_INIT", - ListInit: "LIST_INIT" -}; - - -ClangEnums._EXPR_CXX_H = new HeaderEnums('ExprCXX.h', [ - new ClangEnum('InitializationStyle', 'NEW_INIT_STYLE', (value => ClangEnums._NEW_INIT_STYLE_ENUMS[value]), undefined), - new ClangEnum('ConstructionKind', 'CONSTRUCTION_KIND', (value => ClangEnums._removePrefix(value, "CK_")), undefined) -]); - - -ClangEnums._NEW_INIT_STYLE_ENUMS = { - NoInit: "NO_INIT", - CallInit: "CALL_INIT", - ListInit: "LIST_INIT" -}; - - -ClangEnums._TYPE_TRAITS_H = new HeaderEnums('TypeTraits.h', [ - new ClangEnum('UnaryExprOrTypeTrait', 'UETT_KIND', (value => ClangEnums._removePrefix(value, "UETT_")), ["UETT_Last"]) -]); - - -ClangEnums._NESTED_NAME_SPECIFIER_H = new HeaderEnums('NestedNameSpecifier.h', [ - new ClangEnum('SpecifierKind', 'NESTED_NAMED_SPECIFIER', undefined, undefined) -]); - - -ClangEnums._DECL_CXX_H = new HeaderEnums('DeclCxx.h', [ - new ClangEnum('LanguageIDs', 'LINKAGE_LANGUAGE', (value => ClangEnums._removePrefix(value, "lang_").toUpperCase()), undefined) -]); - - -ClangEnums._LAMBDA_H = new HeaderEnums('Lambda.h', [ - new ClangEnum('LambdaCaptureDefault', 'LAMBDA_CAPTURE_DEFAULT', (value => ClangEnums._removePrefix(value, "LCD_")), undefined), - new ClangEnum('LambdaCaptureKind', 'LAMBDA_CAPTURE_KIND', (value => ClangEnums._removePrefix(value, "LCK_")), undefined) -]); - - -ClangEnums._TEMPLATE_NAME_H = new HeaderEnums('TemplateName.h', [ - new ClangEnum('NameKind', 'TEMPLATE_NAME_KIND', undefined, undefined) -]); - - -ClangEnums._ATTR_H = new HeaderEnums('Attr.h', [ - new ClangEnum('VisibilityType', 'VISIBILITY_ATTR_TYPE', undefined, undefined) -]); - - -ClangEnums._EXPR_H = new HeaderEnums('Expr.h', [ - new ClangEnum('Kind', 'OFFSET_OF_NODE_KIND', (value => value.toUpperCase()), undefined, 'OffsetOfNode'), - new ClangEnum('IdentKind', 'PREDEFINED_ID_TYPE', undefined, undefined, 'PredefinedExpr'), - new ClangEnum('StringKind', 'STRING_KIND', (value => value.toUpperCase()), undefined) - //new ClangEnum('Kind', 'DESIGNATOR_KIND', undefined, undefined, 'Designator') -]); - - - -/** - - - - -- clang/Ast/Expr.h -Kind, OFFSET_OF_NODE_KIND (class OffsetOfNode) -IdentKind, PREDEFINED_ID_TYPE -StringKind, STRING_KIND -Kind, DESIGNATOR_KIND (class Designator) - - - */ - - - -ClangEnums._HEADERS = [ClangEnums._TYPE_H, - ClangEnums._OPERATIONS_KINDS_H, - ClangEnums._ATTR_KINDS_H, - ClangEnums._SPECIFIERS_H, - ClangEnums._EXCEPTION_SPECIFICATION_TYPE_H, - ClangEnums._LINKAGE_H, - ClangEnums._VISIBILITY_H, - ClangEnums._TEMPLATE_BASE_H, - ClangEnums._DECL_H, - ClangEnums._EXPR_CXX_H, - ClangEnums._TYPE_TRAITS_H, - ClangEnums._NESTED_NAME_SPECIFIER_H, - ClangEnums._DECL_CXX_H, - ClangEnums._LAMBDA_H, - ClangEnums._TEMPLATE_NAME_H, - ClangEnums._ATTR_H, - ClangEnums._EXPR_H -]; - -ClangEnums.getHeader = function(headerFilename) { - if(ClangEnums._HEADER_MAP === undefined) { - ClangEnums._HEADER_MAP = ClangEnums.buildHeaderMap(); - } - - return ClangEnums._HEADER_MAP[headerFilename]; -} - -ClangEnums.buildHeaderMap = function() { - var map = {}; - - for(var header of ClangEnums._HEADERS) { - map[header.getName()] = header; - } - //println("Header map"); - //printlnObject(map); - return map; -} - -/** - * Mappers - */ -ClangEnums._removePrefix = function(enumValue, prefix) { - - if(enumValue.startsWith(prefix)) { - enumValue = enumValue.substring(prefix.length); - } - - return enumValue; -} - - -ClangEnums._removeSuffix = function(enumValue, suffix) { - - if(enumValue.endsWith(suffix)) { - enumValue = enumValue.substring(0, enumValue.length - suffix.length); - } - - return enumValue; -} - -/* -ClangEnums._refQualMapper = function(enumValue) { -//println("MAPPER FOR " + enumValue); - if(enumValue.startsWith("RQ_")) { -// println("Starts with RQ_"); - enumValue = enumValue.substring(3); - } -// println("RETURNING: " + enumValue); - return enumValue; -} -*/ -/* -ClangEnums._elaboratedTypeKeyworkMapper = function(enumValue) { - - if(enumValue.startsWith("ETK_")) { - enumValue = enumValue.substring(4); - } - - enumValue = enumValue.toUpperCase(); - - return enumValue; -} -*/ -/* -ClangEnums._tagKindMapperMapper = function(enumValue) { - - if(enumValue.startsWith("TTK_")) { - enumValue = enumValue.substring(4); - } - - enumValue = enumValue.toUpperCase(); - - return enumValue; -} -*/ \ No newline at end of file diff --git a/ClangAstDumper/clang_enums/ClangEnumsGenerator.lara b/ClangAstDumper/clang_enums/ClangEnumsGenerator.lara deleted file mode 100644 index 4c01ea0c2..000000000 --- a/ClangAstDumper/clang_enums/ClangEnumsGenerator.lara +++ /dev/null @@ -1,43 +0,0 @@ -import ClangEnums; -import weaver.Query; -import lara.Io; - - -aspectdef ClangEnumsGenerator - input header="Type.h", outputFolder="./" end - - println("Calling generator for header '"+header+"', generating files in folder " + Io.getPath(outputFolder).getAbsolutePath()); - - // Get corresponding ClangEnum - var headerEnums = ClangEnums.getHeader(header); - - if(headerEnums === undefined) { - println("Could not find ClangEnum for header file '"+header+"'"); - return; - } - - - println("Searching for enums in header '"+header+"'..."); - - for(var $enum of Query.search("enumDecl")) { - headerEnums.process($enum); - /* - if(typeEnums.has($enum.name)) { - println("Saving Enum: " + $enum.name); - // Save enum values - var enumFile = Io.getPath($enum.name + "_type.h.txt"); - var enumValues = $enum.enumerators.map($enumValue => $enumValue.name).join("\n"); - Io.writeFile(enumFile, enumValues); - } -*/ - } - - println("Finished searching, generating code"); - - headerEnums.generateCode(outputFolder); - -// println($app.ast); - - -// println("hello"); -end \ No newline at end of file diff --git a/ClangAstDumper/clang_enums/ExtractEnums.cmake b/ClangAstDumper/clang_enums/ExtractEnums.cmake deleted file mode 100644 index 2fd813fdb..000000000 --- a/ClangAstDumper/clang_enums/ExtractEnums.cmake +++ /dev/null @@ -1,29 +0,0 @@ -# extract_enums function -# Extracts the enum values from a given header file. -# -# Parameters: -# CURRENT_TARGET - A CMake target -# INCLUDE_DIRECTORIES_FOUND - Output list where the include directories will be stored -# -function(extract_enums BASE_FOLDER HEADER_FILENAME) -#CURRENT_TARGET -# Create target for clang/AST/Type.h -set(TARGET_NAME "enums_${HEADER_FILENAME}") - -#add_library(${TARGET_NAME} "${LLVM_DIR}/src/include/clang/AST/Type.h") -add_library(${TARGET_NAME} "${BASE_FOLDER}/${HEADER_FILENAME}") - -set_property(TARGET ${TARGET_NAME} PROPERTY CXX_STANDARD 14) - -# Because it is a header file, it cannot figure it out alone -set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) - -# Add includes -target_include_directories(${TARGET_NAME} - SYSTEM PUBLIC ${DEPS_INCLUDES} -) - -# Add enums helper -clava_weave(${TARGET_NAME} "ClangEnumsGenerator.lara" ARGS "header:'${HEADER_FILENAME}', outputFolder:'${CMAKE_CURRENT_LIST_DIR}/..'" JAVA_FLAGS -Xmx8000m) - -endfunction(extract_enums) diff --git a/ClangAstDumper/clang_enums/Extractors.js b/ClangAstDumper/clang_enums/Extractors.js new file mode 100644 index 000000000..8ce7daa83 --- /dev/null +++ b/ClangAstDumper/clang_enums/Extractors.js @@ -0,0 +1,102 @@ +class Extractors { + static simpleExtractor(enumName, lines, occurence) { + const regex = "enum\\s+(class\\s+)?" + enumName + "\\s.*{"; + const enumNameRegex = new RegExp(regex); + //const enumNameRegex = new RegExp("\\s"+enumName+"\\s"); + + const enums = []; + let searching = true; + let completed = false; + let currentOccurence = 0; + + for (var line of lines) { + if (searching) { + // Find enum + const matchResult = line.match(enumNameRegex); + if (matchResult == null) { + continue; + } + + // Found enum, increment occurence + currentOccurence++; + + // If not correct occurent, continue + if (currentOccurence !== occurence) { + continue; + } + + // Found occurence, finish search and fallthrough, updating line + searching = false; + + const indexOfBracket = line.indexOf("{"); + line = line.substring(indexOfBracket + 1); + + //continue; + } + + // Collect enums until } is found + line = line.trim(); + + if (line.startsWith("}")) { + // Finished, set flag + completed = true; + break; + } + + // Continue if empty or comment + if (line == "" || line.startsWith("#") || line.startsWith("+")) { + continue; + } + + // Split by , + const enumNames = line + .split(",") + // Trim string + .map((s) => s.trim()) + // Remove empty strings + .filter((s) => s.length > 0) + // Remove =, } if present + .map((s) => Extractors._processEnum(s)); + /* + // Remove , if present + if (line.endsWith(",")) { + line = line.substring(0, line.length - 1); + } +*/ + // Get enum + + //println("Enum: " + line) + for (const enumName of enumNames) { + enums.push(enumName); + } + + if (line.includes("}")) { + // Finished, set flag + completed = true; + break; + } + } + + if (!completed) { + throw new Error("Could not find } for enum " + enumName); + } + + return enums; + } + + static _processEnum(enumName) { + // Check for = + const indexOfEquals = enumName.indexOf("="); + if (indexOfEquals !== -1) { + enumName = enumName.substring(0, indexOfEquals).trim(); + } + + // Check for } + const indexOfBraket = enumName.indexOf("}"); + if (indexOfBraket !== -1) { + enumName = enumName.substring(0, indexOfBraket).trim(); + } + + return enumName; + } +} diff --git a/ClangAstDumper/clang_enums/HeaderEnums.js b/ClangAstDumper/clang_enums/HeaderEnums.js new file mode 100644 index 000000000..805e01468 --- /dev/null +++ b/ClangAstDumper/clang_enums/HeaderEnums.js @@ -0,0 +1,169 @@ +laraImport("lara.util.StringSet"); +laraImport("lara.Io"); +laraImport("lara.Strings"); +laraImport("lara.util.ProcessExecutor"); +laraImport("weaver.Query"); + +/** + * @class + */ +class HeaderEnums { + constructor(headerFilename, clangEnums) { + this.headerFilename = headerFilename; + this.enumMap = {}; + this.currentEnumSet = new StringSet(); + this.enumsInsideClass = new StringSet(); + + for (var clangEnum of clangEnums) { + this.enumMap[clangEnum.getCompleteEnumName()] = clangEnum; + this.currentEnumSet.add(clangEnum.getCompleteEnumName()); + + var className = clangEnum.getClassName(); + if (className !== undefined) { + this.enumsInsideClass.add(clangEnum.getEnumName()); + } + } + } + + getName() { + return this.headerFilename; + } + + _getEnumName($enum) { + // Check if enum needs to be prefixed by class + if (!this.enumsInsideClass.has($enum.name)) { + return $enum.name; + } + + // Get class + var $class = $enum.ancestor("class"); + + return $class.name + "_" + $enum.name; + } + + process(llvmFolder) { + const compilerCmd = "clang"; + const headerFile = Io.getPath(llvmFolder, this.headerFilename); + + // Preprocess header + const exec = new ProcessExecutor(); + // Clean folder and set working directory + + exec.setPrintToConsole(false); + const preprocessedFile = exec.execute( + compilerCmd, + "-E", + headerFile.getAbsolutePath() + ); + + debug( + "Processed header '" + + headerFile.getAbsolutePath() + + "':\n" + + preprocessedFile + ); + + const headerLines = Strings.asLines(preprocessedFile); + + //println("Header: " + headerLines); + + for (const enumName in this.enumMap) { + const clangEnum = this.enumMap[enumName]; + //println("Enum name: " + enumName); + //printlnObject(clangEnum); + + // Extract enums + //const enumValues = clangEnum.extractor(enumName, headerLines); + //println("Values: " + enumValues); + clangEnum.setEnumValues(headerLines); + /* + var filename = + this.headerFilename.replace(".", "_") + "_" + enumName + ".txt"; + var file = Io.getPath(filename); + println("Saving enum values to file '" + file.getAbsolutePath() + "'"); + Io.writeFile(filename, enumValues.join("\n")); + */ + } + //println("Enums:"); + //printlnObject(this.enumMap); + /* + // Get enum name + var enumName = this._getEnumName($enum); + + // Check if valid enum + //if(!this.currentEnumSet.has($enum.name)) { + if (!this.currentEnumSet.has(enumName)) { + return; + } + + //println("Adding enum '"+$enum.name+"'"); + println("Adding enum '" + enumName + "'"); + + // Set enums + var enumValues = $enum.enumerators.map(($enumValue) => $enumValue.name); + //this.enumMap[$enum.name].setEnumValues(enumValues); + this.enumMap[enumName].setEnumValues(enumValues); + + // Save enums, for referece + //var filename = this.headerFilename.replace(".", "_") + "_" + $enum.name + ".txt"; + var filename = + this.headerFilename.replace(".", "_") + "_" + enumName + ".txt"; + var file = Io.getPath(filename); + println("Saving enum values to file '" + file.getAbsolutePath() + "'"); + Io.writeFile(filename, enumValues.join("\n")); + */ + } + + generateCode(outputFolder) { + const headerFile = Io.getPath(this.headerFilename); + + //var filename = "enums_" + this.headerFilename.replace(".", "_") + ".cpp"; + var filename = "enums_" + headerFile.getName().replace(".", "_") + ".cpp"; + + var code = '#include "ClangEnums.h"\n\n'; + + // Generate code for each of the enums + for (var enumName in this.enumMap) { + var enumCode = this.enumMap[enumName].getCode(); + + if (enumCode === undefined) { + println( + "Skipped code generation for " + this.headerFilename + "::" + enumName + ); + continue; + } + + code += enumCode + "\n"; + } + + const outputFile = Io.getPath(outputFolder, filename); + println("Generating header file '" + outputFile.getAbsolutePath() + "'"); + Io.writeFile(Io.getPath(outputFolder, filename), code); + } + + generateJavaEnums(outputFolder) { + const headerFile = Io.getPath(this.headerFilename); + + // Dump the names of each enum + for (var enumName in this.enumMap) { + var enumValues = this.enumMap[enumName].getEnumValues(); + + var filename = + "enums_" + + headerFile.getName().replace(".", "_") + + "_" + + enumName + + ".txt"; + + var code = enumValues.join(",\n") + ";"; + + const outputFile = Io.getPath(outputFolder, filename); + println( + "Generating Java enum values file '" + + outputFile.getAbsolutePath() + + "'" + ); + Io.writeFile(Io.getPath(outputFolder, filename), code); + } + } +} diff --git a/ClangAstDumper/clang_enums/HeaderEnums.lara b/ClangAstDumper/clang_enums/HeaderEnums.lara deleted file mode 100644 index d9e7b9f2e..000000000 --- a/ClangAstDumper/clang_enums/HeaderEnums.lara +++ /dev/null @@ -1,86 +0,0 @@ -import lara.util.StringSet; -import lara.Io; - -/** - * @class - */ -var HeaderEnums = function(headerFilename, clangEnums) { - this.headerFilename = headerFilename; - this.enumMap = {}; - this.currentEnumSet = new StringSet(); - this.enumsInsideClass = new StringSet(); - - for(var clangEnum of clangEnums) { - this.enumMap[clangEnum.getCompleteEnumName()] = clangEnum; - this.currentEnumSet.add(clangEnum.getCompleteEnumName()); - - var className = clangEnum.getClassName(); - if(className !== undefined) { - this.enumsInsideClass.add(clangEnum.getEnumName()); - } - } -}; - -HeaderEnums.prototype.getName = function() { - return this.headerFilename; -} - -HeaderEnums.prototype._getEnumName = function($enum) { - // Check if enum needs to be prefixed by class - if(!this.enumsInsideClass.has($enum.name)) { - return $enum.name; - } - - // Get class - var $class = $enum.ancestor("class"); - - return $class.name + "_" + $enum.name; -} - -HeaderEnums.prototype.process = function($enum) { - - // Get enum name - var enumName = this._getEnumName($enum); - - // Check if valid enum - //if(!this.currentEnumSet.has($enum.name)) { - if(!this.currentEnumSet.has(enumName)) { - return; - } - - //println("Adding enum '"+$enum.name+"'"); - println("Adding enum '"+enumName+"'"); - - // Set enums - var enumValues = $enum.enumerators.map($enumValue => $enumValue.name); - //this.enumMap[$enum.name].setEnumValues(enumValues); - this.enumMap[enumName].setEnumValues(enumValues); - - // Save enums, for referece - //var filename = this.headerFilename.replace(".", "_") + "_" + $enum.name + ".txt"; - var filename = this.headerFilename.replace(".", "_") + "_" + enumName + ".txt"; - var file = Io.getPath(filename); - println("Saving enum values to file '"+file.getAbsolutePath()+"'"); - Io.writeFile(filename, enumValues.join("\n")); -} - -HeaderEnums.prototype.generateCode = function(outputFolder) { - - var filename = "enums_" + this.headerFilename.replace(".", "_") + ".cpp"; - - var code = '#include "ClangEnums.h"\n\n'; - - // Generate code for each of the enums - for(var enumName in this.enumMap) { - var enumCode = this.enumMap[enumName].getCode(); - - if(enumCode === undefined) { - println("Skipped code generation for " + this.headerFilename + "::" + enumName); - continue; - } - - code += enumCode + "\n"; - } - - Io.writeFile(Io.getPath(outputFolder, filename), code); -} diff --git a/ClangAstDumper/clang_enums/Main.js b/ClangAstDumper/clang_enums/Main.js new file mode 100644 index 000000000..7cba6978a --- /dev/null +++ b/ClangAstDumper/clang_enums/Main.js @@ -0,0 +1,124 @@ +laraImport("clava.Clava"); +laraImport("lara.Io"); +laraImport("lara.Strings"); +laraImport("lara.util.ProcessExecutor"); +laraImport("ClangEnums"); +laraImport("HeaderEnums"); + +const llvmFolder = laraArgs.llvmFolder; +const outputFolder = laraArgs.outputFolder; + +println("Using LLVM folder '" + llvmFolder + "'"); +println("Generating enums to folder '" + outputFolder + "'"); + +for (const header of ClangEnums._HEADERS) { + header.process(llvmFolder); + header.generateCode(outputFolder); + header.generateJavaEnums(Io.mkdir(outputFolder, "java_enums")); + /* + try { + header.process(llvmFolder); + header.generateCode("C:\\Users\\JBispo\\Work\\Repos\\Lab\\clava\\ClangAstDumper"); + } catch(e) { + println("Skipping header " + header.getName() + ": " + e); + } +*/ +} + +/* + const header = ClangEnums._DECL_CXX_H; + header.process(llvmFolder); + header.generateCode("C:\\Users\\JBispo\\Work\\Repos\\Lab\\clava\\ClangAstDumper"); + header.generateJavaEnums("C:\\Users\\JBispo\\Work\\Repos\\Lab\\clava\\ClangAstDumper\\clang_enums_v2\\JavaEnums"); +*/ +/* +const testHeaderEnum = ClangEnums._OPERATIONS_KINDS_H; + +testHeaderEnum.process(llvmFolder) + +testHeaderEnum.generateCode("C:\\Users\\JBispo\\Work\\Repos\\Lab\\clava\\ClangAstDumper"); +*/ +/* +const compilerCmd = "clang" +const baseFolder = Clava.getData().getContextFolder(); + + + +const headerFile = Io.getPath(llvmFolder, "/src/include/clang/AST/OperationKinds.h"); + +//const preprocessorFolder = Io.mkdir(baseFolder, "preprocessorOutput") + +// Preprocess header +const exec = new ProcessExecutor(); +// Clean folder and set working directory +//Io.deleteFolderContents(preprocessorFolder); +//exec.setWorkingDir(preprocessorFolder); +exec.setPrintToConsole(false); +const preprocessedFile = exec.execute(compilerCmd, "-E", headerFile.getAbsolutePath()); +//println(headerFile.getAbsolutePath()) + +println(preprocessedFile) + +const headerLines = Strings.asLines(preprocessedFile); + +// Extract enum from header +const enums = extractEnum("CastKind", headerLines); +println("enums:\n"+enums); +*/ +/* +function extractEnum(enumName, lines) { + const regex = "enum\\s+"+enumName+"\\s+{"; + const enumNameRegex = new RegExp(regex); + //const enumNameRegex = new RegExp("\\s"+enumName+"\\s"); + + const enums = []; + let searching = true; + let completed = false; + + + for(var line of lines) { + if(searching) { + // Find enum + const matchResult = line.match(enumNameRegex) + if(matchResult == null) { + continue; + } + + // Found enum, finish search + searching = false; + continue; + } + + // Collect enums until } is found + line = line.trim(); + + if(line.startsWith("}")){ + // Finished, set flag + completed = true; + break; + } + + // Continue if empty or comment + if(line == "" || line.startsWith("#")) { + continue; + } + + // Remove , if present + if(line.endsWith(",")) { + line = line.substring(0, line.length-1); + } + + // Get enum + + //println("Enum: " + line) + enums.push(line); + + } + + if(!completed) { + throw new Error("Could not find } for enum " + enumName); + } + + return enums; +} +*/ diff --git a/ClangAstDumper/clang_enums/config.clava b/ClangAstDumper/clang_enums/config.clava new file mode 100644 index 000000000..0aab5c824 --- /dev/null +++ b/ClangAstDumper/clang_enums/config.clava @@ -0,0 +1,236 @@ + + LaraI Options + + + workspace + + + + + + library includes + + + + + + main + + + + output + + + + parsingNumThreads + 0 + + + libcCxxMode + AUTO + + + cudaGpuArch + + + + parseIncludes + true + + + javascript + false + + + Disable Remote Dependencies + false + + + joptions_current_folder_path + + + + Generate Modified Code Only + false + + + parallelParsing + true + + + api_autoload + true + + + continueOnParsingErrors + false + + + Weaved code foldername + woven_code + + + external_dependencies + + + + + + Disable Weaving + false + + + metrics + + + false + + + + C/C++ Standard + GNUXX11 + + + workspace_extra + + + + Clava Custom Resources + false + + + restrict mode + false + + + loc + false + + + Disable Code Generation + false + + + log + + + false + + + + autoimportjs + false + + + Clean intermediate files + true + + + systemIncludesThreshold + 1 + + + argv + {"llvmFolder":"C:/Users/JBispo/Work/Repos/Lab/clava/deps/deps-lib/../artifacts/llvm14-Windows-gcc5"} + + + tools + + + false + + + + jsEngine + GRAALVM_COMPAT + + + flatOutputFolder + false + + + bundle_tags + + + + customClangAstDumperExe + + + + Compiler Flags + + + + Compiler Flags in list format + + + -Wno-narrowing + -Wno-deprecated-register + -Wno-unused-value + + + + + Check C/CXX Syntax + false + + + aspect + Main.js + + + ignoreHeaderIncludes + + + + + + cudaPath + + + + stack trace + true + + + include + + + + + + debug + false + + + Disable Clava Info + false + + + Copy files in sources + false + + + Generate CMake Integration Helper Files + false + + + verbose + warnings + + + header includes + + + + + + report + + + false + + + + false + \ No newline at end of file From f0649ce227801dfb43679cd6de71f33dc69bfed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sat, 18 Feb 2023 23:03:42 +0000 Subject: [PATCH 07/30] [ClangAstDumper] Updates (auto-generated) enums --- ClangAstDumper/enums_AttrKinds_h.cpp | 33 +++++++- ClangAstDumper/enums_OperationKinds_h.cpp | 1 + ClangAstDumper/enums_Specifiers_h.cpp | 1 + ClangAstDumper/enums_Type_h.cpp | 91 ++++++++++++++++++++--- 4 files changed, 111 insertions(+), 15 deletions(-) diff --git a/ClangAstDumper/enums_AttrKinds_h.cpp b/ClangAstDumper/enums_AttrKinds_h.cpp index 6824c2f33..85cff79b1 100644 --- a/ClangAstDumper/enums_AttrKinds_h.cpp +++ b/ClangAstDumper/enums_AttrKinds_h.cpp @@ -2,7 +2,9 @@ extern const std::string clava::ATTRIBUTES[] = { "AddressSpace", + "AnnotateType", "ArmMveStrictPolymorphism", + "BTFTypeTag", "CmseNSCall", "NoDeref", "ObjCGC", @@ -25,10 +27,16 @@ extern const std::string clava::ATTRIBUTES[] = { "UPtr", "FallThrough", "Likely", + "MustTail", + "OpenCLUnrollHint", "Suppress", "Unlikely", + "AlwaysInline", + "NoInline", "NoMerge", + "AArch64SVEPcs", "AArch64VectorPcs", + "AMDGPUKernelCall", "AcquireHandle", "AnyX86NoCfCheck", "CDecl", @@ -44,10 +52,12 @@ extern const std::string clava::ATTRIBUTES[] = { "PreserveMost", "RegCall", "StdCall", + "SwiftAsyncCall", "SwiftCall", "SysVABI", "ThisCall", "VectorCall", + "SwiftAsyncContext", "SwiftContext", "SwiftErrorResult", "SwiftIndirectResult", @@ -76,7 +86,6 @@ extern const std::string clava::ATTRIBUTES[] = { "AllocAlign", "AllocSize", "AlwaysDestroy", - "AlwaysInline", "AnalyzerNoReturn", "AnyX86Interrupt", "AnyX86NoCallerSavedRegisters", @@ -92,6 +101,7 @@ extern const std::string clava::ATTRIBUTES[] = { "Assumption", "Availability", "BPFPreserveAccessIndex", + "BTFDeclTag", "Blocks", "Builtin", "C11NoReturn", @@ -135,13 +145,16 @@ extern const std::string clava::ATTRIBUTES[] = { "DLLImportStaticLocal", "Deprecated", "Destructor", + "DiagnoseAsBuiltin", "DiagnoseIf", + "DisableSanitizerInstrumentation", "DisableTailCalls", "EmptyBases", "EnableIf", "EnforceTCB", "EnforceTCBLeaf", "EnumExtensibility", + "Error", "ExcludeFromExplicitInstantiation", "ExclusiveTrylockFunction", "ExternalSourceSymbol", @@ -150,10 +163,14 @@ extern const std::string clava::ATTRIBUTES[] = { "Flatten", "Format", "FormatArg", + "FunctionReturnThunks", "GNUInline", "GuardedBy", "GuardedVar", "HIPManaged", + "HLSLNumThreads", + "HLSLSV_GroupIndex", + "HLSLShader", "Hot", "IBAction", "IBOutlet", @@ -165,6 +182,7 @@ extern const std::string clava::ATTRIBUTES[] = { "Leaf", "LockReturned", "LocksExcluded", + "M68kInterrupt", "MIGServerRoutine", "MSAllocator", "MSInheritance", @@ -191,10 +209,11 @@ extern const std::string clava::ATTRIBUTES[] = { "NoDebug", "NoDestroy", "NoDuplicate", - "NoInline", "NoInstrumentFunction", "NoMicroMips", "NoMips16", + "NoProfileFunction", + "NoRandomizeLayout", "NoReturn", "NoSanitize", "NoSpeculativeLoadHardening", @@ -231,7 +250,6 @@ extern const std::string clava::ATTRIBUTES[] = { "ObjCSubclassingRestricted", "OpenCLIntelReqdSubGroupSize", "OpenCLKernel", - "OpenCLUnrollHint", "OptimizeNone", "Override", "Owner", @@ -250,15 +268,18 @@ extern const std::string clava::ATTRIBUTES[] = { "PtGuardedVar", "Pure", "RISCVInterrupt", + "RandomizeLayout", "Reinitializes", "ReleaseCapability", "ReqdWorkGroupSize", "RequiresCapability", "Restrict", + "Retain", "ReturnTypestate", "ReturnsNonNull", "ReturnsTwice", "SYCLKernel", + "SYCLSpecialClass", "ScopedLockable", "Section", "SelectAny", @@ -266,8 +287,10 @@ extern const std::string clava::ATTRIBUTES[] = { "SetTypestate", "SharedTrylockFunction", "SpeculativeLoadHardening", + "StandaloneDebug", "StrictFP", "SwiftAsync", + "SwiftAsyncError", "SwiftAsyncName", "SwiftAttr", "SwiftBridge", @@ -278,6 +301,7 @@ extern const std::string clava::ATTRIBUTES[] = { "SwiftPrivate", "TLSModel", "Target", + "TargetClones", "TestTypestate", "TransparentUnion", "TrivialABI", @@ -288,6 +312,7 @@ extern const std::string clava::ATTRIBUTES[] = { "Uninitialized", "Unused", "Used", + "UsingIfExists", "Uuid", "VecReturn", "VecTypeHint", @@ -304,9 +329,11 @@ extern const std::string clava::ATTRIBUTES[] = { "X86ForceAlignArgPointer", "XRayInstrument", "XRayLogArgs", + "ZeroCallUsedRegs", "AbiTag", "Alias", "AlignValue", + "BuiltinAlias", "CalledOnce", "IFunc", "InitSeg", diff --git a/ClangAstDumper/enums_OperationKinds_h.cpp b/ClangAstDumper/enums_OperationKinds_h.cpp index 1f44b781c..bd50d2f85 100644 --- a/ClangAstDumper/enums_OperationKinds_h.cpp +++ b/ClangAstDumper/enums_OperationKinds_h.cpp @@ -26,6 +26,7 @@ extern const std::string clava::CAST_KIND[] = { "PointerToIntegral", "PointerToBoolean", "ToVoid", + "MatrixCast", "VectorSplat", "IntegralCast", "IntegralToBoolean", diff --git a/ClangAstDumper/enums_Specifiers_h.cpp b/ClangAstDumper/enums_Specifiers_h.cpp index 474936fb0..9fa228124 100644 --- a/ClangAstDumper/enums_Specifiers_h.cpp +++ b/ClangAstDumper/enums_Specifiers_h.cpp @@ -16,6 +16,7 @@ extern const std::string clava::CALLING_CONVENTION[] = { "SpirFunction", "OpenCLKernel", "Swift", + "SwiftAsync", "PreserveMost", "PreserveAll", "AArch64VectorCall", diff --git a/ClangAstDumper/enums_Type_h.cpp b/ClangAstDumper/enums_Type_h.cpp index f92cf2d06..b00e7d182 100644 --- a/ClangAstDumper/enums_Type_h.cpp +++ b/ClangAstDumper/enums_Type_h.cpp @@ -100,6 +100,72 @@ extern const std::string clava::BUILTIN_KIND[] = { "SveBool", "VectorQuad", "VectorPair", + "RvvInt8mf8", + "RvvInt8mf4", + "RvvInt8mf2", + "RvvInt8m1", + "RvvInt8m2", + "RvvInt8m4", + "RvvInt8m8", + "RvvUint8mf8", + "RvvUint8mf4", + "RvvUint8mf2", + "RvvUint8m1", + "RvvUint8m2", + "RvvUint8m4", + "RvvUint8m8", + "RvvInt16mf4", + "RvvInt16mf2", + "RvvInt16m1", + "RvvInt16m2", + "RvvInt16m4", + "RvvInt16m8", + "RvvUint16mf4", + "RvvUint16mf2", + "RvvUint16m1", + "RvvUint16m2", + "RvvUint16m4", + "RvvUint16m8", + "RvvInt32mf2", + "RvvInt32m1", + "RvvInt32m2", + "RvvInt32m4", + "RvvInt32m8", + "RvvUint32mf2", + "RvvUint32m1", + "RvvUint32m2", + "RvvUint32m4", + "RvvUint32m8", + "RvvInt64m1", + "RvvInt64m2", + "RvvInt64m4", + "RvvInt64m8", + "RvvUint64m1", + "RvvUint64m2", + "RvvUint64m4", + "RvvUint64m8", + "RvvFloat16mf4", + "RvvFloat16mf2", + "RvvFloat16m1", + "RvvFloat16m2", + "RvvFloat16m4", + "RvvFloat16m8", + "RvvFloat32mf2", + "RvvFloat32m1", + "RvvFloat32m2", + "RvvFloat32m4", + "RvvFloat32m8", + "RvvFloat64m1", + "RvvFloat64m2", + "RvvFloat64m4", + "RvvFloat64m8", + "RvvBool1", + "RvvBool2", + "RvvBool4", + "RvvBool8", + "RvvBool16", + "RvvBool32", + "RvvBool64", "Void", "Bool", "Char_U", @@ -152,6 +218,7 @@ extern const std::string clava::BUILTIN_KIND[] = { "Float16", "BFloat16", "Float128", + "Ibm128", "NullPtr", "ObjCId", "ObjCClass", @@ -191,20 +258,20 @@ extern const std::string clava::UTT_KIND[] = { }; extern const std::string clava::ELABORATED_TYPE_KEYWORD[] = { - "STRUCT", - "INTERFACE", - "UNION", - "CLASS", - "ENUM", - "TYPENAME", - "NONE", + "Struct", + "Interface", + "Union", + "Class", + "Enum", + "Typename", + "None", }; extern const std::string clava::TAG_KIND[] = { - "STRUCT", - "INTERFACE", - "UNION", - "CLASS", - "ENUM", + "Struct", + "Interface", + "Union", + "Class", + "Enum", }; From c51da22969fd489a2df69a3842f76b706a7dfddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sat, 18 Feb 2023 23:04:15 +0000 Subject: [PATCH 08/30] [ClangAstDumper] Adds support for attribute TypeVisibilityAttr --- ClangAstDumper/ClavaConstants.cpp | 1 + ClangAstDumper/ClavaConstants.h | 1 + ClangAstDumper/ClavaDataDumper.h | 1 + ClangAstDumper/ClavaDataDumperAttrs.cpp | 13 ++++++++++++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ClangAstDumper/ClavaConstants.cpp b/ClangAstDumper/ClavaConstants.cpp index eb39c9d70..426d4327f 100644 --- a/ClangAstDumper/ClavaConstants.cpp +++ b/ClangAstDumper/ClavaConstants.cpp @@ -145,6 +145,7 @@ const std::string clava::getName(const AttrNode attrNode) { case clava::AttrNode::FORMAT: return "FormatAttr"; case clava::AttrNode::NON_NULL: return "NonNullAttr"; case clava::AttrNode::VISIBILITY: return "VisibilityAttr"; + case clava::AttrNode::TYPE_VISIBILITY: return "TypeVisibilityAttr"; default: { std::string enumValue = std::to_string(static_cast::type>(attrNode)); diff --git a/ClangAstDumper/ClavaConstants.h b/ClangAstDumper/ClavaConstants.h index 60ad11260..4a363b0e8 100644 --- a/ClangAstDumper/ClavaConstants.h +++ b/ClangAstDumper/ClavaConstants.h @@ -155,6 +155,7 @@ namespace clava { FORMAT, NON_NULL, VISIBILITY, + TYPE_VISIBILITY, }; diff --git a/ClangAstDumper/ClavaDataDumper.h b/ClangAstDumper/ClavaDataDumper.h index 364969c4d..de9a25d3a 100644 --- a/ClangAstDumper/ClavaDataDumper.h +++ b/ClangAstDumper/ClavaDataDumper.h @@ -238,6 +238,7 @@ namespace clava { void DumpFormatAttrData(const FormatAttr *A); void DumpNonNullAttrData(const NonNullAttr *A); void DumpVisibilityAttrData(const VisibilityAttr *A); + void DumpTypeVisibilityAttrData(const TypeVisibilityAttr *A); const std::string getDataName(DeclNode node); const std::string getDataName(StmtNode node); const std::string getDataName(TypeNode node); diff --git a/ClangAstDumper/ClavaDataDumperAttrs.cpp b/ClangAstDumper/ClavaDataDumperAttrs.cpp index dd3ab6c0c..ffcd0f4b0 100644 --- a/ClangAstDumper/ClavaDataDumperAttrs.cpp +++ b/ClangAstDumper/ClavaDataDumperAttrs.cpp @@ -15,6 +15,8 @@ const std::map clava::ATTR_DATA_MAP = { {"FormatAttr", clava::AttrNode::FORMAT}, {"NonNullAttr", clava::AttrNode::NON_NULL}, {"VisibilityAttr", clava::AttrNode::VISIBILITY}, + {"TypeVisibilityAttr", clava::AttrNode::TYPE_VISIBILITY}, + }; @@ -52,6 +54,8 @@ void clava::ClavaDataDumper::dump(clava::AttrNode attrNode, const Attr* A) { DumpNonNullAttrData(static_cast(A)); break; case clava::AttrNode::VISIBILITY: DumpVisibilityAttrData(static_cast(A)); break; + case clava::AttrNode::TYPE_VISIBILITY: + DumpTypeVisibilityAttrData(static_cast(A)); break; default: throw std::invalid_argument("ClangDataDumper::dump(DeclNode):: Case not implemented, '" + getName(attrNode) + "'"); } @@ -121,4 +125,11 @@ void clava::ClavaDataDumper::DumpVisibilityAttrData(const VisibilityAttr *A) { DumpAttrData(A); clava::dump(clava::VISIBILITY_ATTR_TYPE[A->getVisibility()]); -} \ No newline at end of file +} + +void clava::ClavaDataDumper::DumpTypeVisibilityAttrData(const TypeVisibilityAttr *A) { + // Common + DumpAttrData(A); + + clava::dump(clava::VISIBILITY_ATTR_TYPE[A->getVisibility()]); +} From f3c2ef6168056706908786f20d1bdbb52bcc0bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:46:34 +0000 Subject: [PATCH 09/30] [ClavaAst] Updates several enums --- .../clava/ast/type/enums/BuiltinKind.java | 67 +++++++++++++++++++ .../ast/type/enums/CallingConvention.java | 1 + .../ast/type/enums/ElaboratedTypeKeyword.java | 5 +- .../up/fe/specs/clava/language/CastKind.java | 1 + .../up/fe/specs/clava/language/TagKind.java | 4 +- 5 files changed, 75 insertions(+), 3 deletions(-) diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/BuiltinKind.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/BuiltinKind.java index a35411b41..175f9a185 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/BuiltinKind.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/BuiltinKind.java @@ -124,6 +124,72 @@ public enum BuiltinKind { SveBool, VectorQuad, VectorPair, + RvvInt8mf8, + RvvInt8mf4, + RvvInt8mf2, + RvvInt8m1, + RvvInt8m2, + RvvInt8m4, + RvvInt8m8, + RvvUint8mf8, + RvvUint8mf4, + RvvUint8mf2, + RvvUint8m1, + RvvUint8m2, + RvvUint8m4, + RvvUint8m8, + RvvInt16mf4, + RvvInt16mf2, + RvvInt16m1, + RvvInt16m2, + RvvInt16m4, + RvvInt16m8, + RvvUint16mf4, + RvvUint16mf2, + RvvUint16m1, + RvvUint16m2, + RvvUint16m4, + RvvUint16m8, + RvvInt32mf2, + RvvInt32m1, + RvvInt32m2, + RvvInt32m4, + RvvInt32m8, + RvvUint32mf2, + RvvUint32m1, + RvvUint32m2, + RvvUint32m4, + RvvUint32m8, + RvvInt64m1, + RvvInt64m2, + RvvInt64m4, + RvvInt64m8, + RvvUint64m1, + RvvUint64m2, + RvvUint64m4, + RvvUint64m8, + RvvFloat16mf4, + RvvFloat16mf2, + RvvFloat16m1, + RvvFloat16m2, + RvvFloat16m4, + RvvFloat16m8, + RvvFloat32mf2, + RvvFloat32m1, + RvvFloat32m2, + RvvFloat32m4, + RvvFloat32m8, + RvvFloat64m1, + RvvFloat64m2, + RvvFloat64m4, + RvvFloat64m8, + RvvBool1, + RvvBool2, + RvvBool4, + RvvBool8, + RvvBool16, + RvvBool32, + RvvBool64, Void, Bool, Char_U, @@ -176,6 +242,7 @@ public enum BuiltinKind { Float16, BFloat16, Float128, + Ibm128, NullPtr, ObjCId, ObjCClass, diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/CallingConvention.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/CallingConvention.java index 3ff61eaa9..ec4f8d82f 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/CallingConvention.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/CallingConvention.java @@ -34,6 +34,7 @@ public enum CallingConvention implements StringProvider { SpirFunction, OpenCLKernel, Swift, + SwiftAsync, PreserveMost, PreserveAll, AArch64VectorCall; diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/ElaboratedTypeKeyword.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/ElaboratedTypeKeyword.java index 4598aa9f8..3332d831b 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/ElaboratedTypeKeyword.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/enums/ElaboratedTypeKeyword.java @@ -13,6 +13,7 @@ package pt.up.fe.specs.clava.ast.type.enums; +import pt.up.fe.specs.util.SpecsStrings; import pt.up.fe.specs.util.enums.EnumHelperWithValue; import pt.up.fe.specs.util.lazy.Lazy; import pt.up.fe.specs.util.providers.StringProvider; @@ -27,7 +28,7 @@ public enum ElaboratedTypeKeyword implements StringProvider { NONE; private static final Lazy> HELPER = EnumHelperWithValue - .newLazyHelperWithValue(ElaboratedTypeKeyword.class, NONE); + .newLazyHelperWithValue(ElaboratedTypeKeyword.class); public static EnumHelperWithValue getHelper() { return HELPER.get(); @@ -43,6 +44,6 @@ public String getCode() { @Override public String getString() { - return name().toLowerCase(); + return SpecsStrings.toCamelCase(name()); } } \ No newline at end of file diff --git a/ClavaAst/src/pt/up/fe/specs/clava/language/CastKind.java b/ClavaAst/src/pt/up/fe/specs/clava/language/CastKind.java index ef6c0ee19..ce34afc8b 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/language/CastKind.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/language/CastKind.java @@ -44,6 +44,7 @@ public enum CastKind implements StringProvider { PointerToIntegral, PointerToBoolean, ToVoid, + MatrixCast, VectorSplat, IntegralCast, IntegralToBoolean, diff --git a/ClavaAst/src/pt/up/fe/specs/clava/language/TagKind.java b/ClavaAst/src/pt/up/fe/specs/clava/language/TagKind.java index f4e695739..736d74fa6 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/language/TagKind.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/language/TagKind.java @@ -13,6 +13,7 @@ package pt.up.fe.specs.clava.language; +import pt.up.fe.specs.util.SpecsStrings; import pt.up.fe.specs.util.enums.EnumHelperWithValue; import pt.up.fe.specs.util.lazy.Lazy; import pt.up.fe.specs.util.providers.StringProvider; @@ -49,6 +50,7 @@ public String getCode() { @Override public String getString() { - return getCode(); + return SpecsStrings.toCamelCase(name()); + // return getCode(); } } \ No newline at end of file From 0f06f321f6f69f200d2eb066ca87724a63187ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:49:25 +0000 Subject: [PATCH 10/30] [ClavaAst] Adds new nodes --- .../clava/ast/decl/BuiltinTemplateDecl.java | 28 +++++++++++++++++++ .../fe/specs/clava/ast/decl/ConceptDecl.java | 28 +++++++++++++++++++ .../up/fe/specs/clava/ast/type/UsingType.java | 28 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/decl/BuiltinTemplateDecl.java create mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/decl/ConceptDecl.java create mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/type/UsingType.java diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/BuiltinTemplateDecl.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/BuiltinTemplateDecl.java new file mode 100644 index 000000000..3757e4e17 --- /dev/null +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/BuiltinTemplateDecl.java @@ -0,0 +1,28 @@ +/** + * Copyright 2023 SPeCS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. under the License. + */ + +package pt.up.fe.specs.clava.ast.decl; + +import java.util.Collection; + +import org.suikasoft.jOptions.Interfaces.DataStore; + +import pt.up.fe.specs.clava.ClavaNode; + +public class BuiltinTemplateDecl extends TemplateDecl { + + public BuiltinTemplateDecl(DataStore data, Collection children) { + super(data, children); + } + +} diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/ConceptDecl.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/ConceptDecl.java new file mode 100644 index 000000000..364984227 --- /dev/null +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/ConceptDecl.java @@ -0,0 +1,28 @@ +/** + * Copyright 2023 SPeCS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. under the License. + */ + +package pt.up.fe.specs.clava.ast.decl; + +import java.util.Collection; + +import org.suikasoft.jOptions.Interfaces.DataStore; + +import pt.up.fe.specs.clava.ClavaNode; + +public class ConceptDecl extends TemplateDecl { + + public ConceptDecl(DataStore data, Collection children) { + super(data, children); + } + +} diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/type/UsingType.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/UsingType.java new file mode 100644 index 000000000..4c5fea44b --- /dev/null +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/type/UsingType.java @@ -0,0 +1,28 @@ +/** + * Copyright 2023 SPeCS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. under the License. + */ + +package pt.up.fe.specs.clava.ast.type; + +import java.util.Collection; + +import org.suikasoft.jOptions.Interfaces.DataStore; + +import pt.up.fe.specs.clava.ClavaNode; + +public class UsingType extends Type { + + public UsingType(DataStore data, Collection children) { + super(data, children); + } + +} From 8081fdcecc91bb9119f4269412f994bec101cbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:50:14 +0000 Subject: [PATCH 11/30] [ClangAstParser] Moves tests that do not pass yet to their own package --- .../antarex/clang/parser/{tests => testers}/ClangCTester.java | 2 +- .../antarex/clang/parser/{tests => testers}/ClangCxxTester.java | 2 +- .../clang/parser/{tests => testers}/CxxProblematicTester.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename ClangAstParser/test/eu/antarex/clang/parser/{tests => testers}/ClangCTester.java (98%) rename ClangAstParser/test/eu/antarex/clang/parser/{tests => testers}/ClangCxxTester.java (97%) rename ClangAstParser/test/eu/antarex/clang/parser/{tests => testers}/CxxProblematicTester.java (98%) diff --git a/ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCTester.java b/ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCTester.java similarity index 98% rename from ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCTester.java rename to ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCTester.java index 84026dda3..502c1c0e8 100644 --- a/ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCTester.java +++ b/ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCTester.java @@ -11,7 +11,7 @@ * specific language governing permissions and limitations under the License. under the License. */ -package eu.antarex.clang.parser.tests; +package eu.antarex.clang.parser.testers; import org.junit.After; import org.junit.BeforeClass; diff --git a/ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCxxTester.java b/ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCxxTester.java similarity index 97% rename from ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCxxTester.java rename to ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCxxTester.java index b144c8fdd..e4b800dcd 100644 --- a/ClangAstParser/test/eu/antarex/clang/parser/tests/ClangCxxTester.java +++ b/ClangAstParser/test/eu/antarex/clang/parser/testers/ClangCxxTester.java @@ -11,7 +11,7 @@ * specific language governing permissions and limitations under the License. under the License. */ -package eu.antarex.clang.parser.tests; +package eu.antarex.clang.parser.testers; import org.junit.After; import org.junit.BeforeClass; diff --git a/ClangAstParser/test/eu/antarex/clang/parser/tests/CxxProblematicTester.java b/ClangAstParser/test/eu/antarex/clang/parser/testers/CxxProblematicTester.java similarity index 98% rename from ClangAstParser/test/eu/antarex/clang/parser/tests/CxxProblematicTester.java rename to ClangAstParser/test/eu/antarex/clang/parser/testers/CxxProblematicTester.java index ccf9a430b..c378df7de 100644 --- a/ClangAstParser/test/eu/antarex/clang/parser/tests/CxxProblematicTester.java +++ b/ClangAstParser/test/eu/antarex/clang/parser/testers/CxxProblematicTester.java @@ -11,7 +11,7 @@ * specific language governing permissions and limitations under the License. under the License. */ -package eu.antarex.clang.parser.tests; +package eu.antarex.clang.parser.testers; import org.junit.After; import org.junit.BeforeClass; From 0121033559e6ed36e56e9a36100f3d0201ccbbf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:50:44 +0000 Subject: [PATCH 12/30] [ClangAstParser] Updates C++ test 'Decl' --- ClangAstParser/resources/cxx/decl.cpp.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ClangAstParser/resources/cxx/decl.cpp.txt b/ClangAstParser/resources/cxx/decl.cpp.txt index 388122c0f..bf6b9dab1 100644 --- a/ClangAstParser/resources/cxx/decl.cpp.txt +++ b/ClangAstParser/resources/cxx/decl.cpp.txt @@ -3,8 +3,8 @@ #include #include -int nullGlobal = 0; -int nullGlobal2 = 0 + 1; +int nullGlobal = 0LL; +int nullGlobal2 = 0LL + 1; class A { static int constexpr constexprInt = 3; From cdbfb0c74f41e0137c81b04a713f7354ccef33a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:54:14 +0000 Subject: [PATCH 13/30] [ClavaWeaver] Updates C++ API test 'Subset' --- .../resources/clava/test/api/cpp/results/SubsetTest.js.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClavaWeaver/resources/clava/test/api/cpp/results/SubsetTest.js.txt b/ClavaWeaver/resources/clava/test/api/cpp/results/SubsetTest.js.txt index 6c4c7c3d1..9ce4d3d03 100644 --- a/ClavaWeaver/resources/clava/test/api/cpp/results/SubsetTest.js.txt +++ b/ClavaWeaver/resources/clava/test/api/cpp/results/SubsetTest.js.txt @@ -29,7 +29,7 @@ void vectorSizeTest(std::vector & v) { { int i; i = 0; - unsigned long decomp_1; + unsigned long long decomp_1; decomp_1 = v.size(); bool decomp_2; decomp_2 = i < decomp_1; From a52ef42d6713efdc0868d4bd7072d5a8d7c8eac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 01:57:20 +0000 Subject: [PATCH 14/30] [ClangAstDumper] Fixes dumping of attributes names --- ClangAstDumper/ClangNodes.cpp | 24 ++++++++++++++++++++++-- ClangAstDumper/ClangNodes.h | 9 +++++++++ ClangAstDumper/ClavaDataDumperAttrs.cpp | 3 +-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/ClangAstDumper/ClangNodes.cpp b/ClangAstDumper/ClangNodes.cpp index d440e706a..83d85c63d 100644 --- a/ClangAstDumper/ClangNodes.cpp +++ b/ClangAstDumper/ClangNodes.cpp @@ -11,7 +11,7 @@ #include - +#include using namespace clang; @@ -30,8 +30,28 @@ const std::string clava::getClassName(const Type* T) { return kindName + "Type"; } +const std::string clava::getAttrKind(const Attr* A) { + // Print information about Attr + //clava::dump(clava::ATTRIBUTES[A->getKind()]); + { + switch (A->getKind()) { +#define ATTR(X) \ + case attr::X: \ + return #X; \ + break; +#include "clang/Basic/AttrList.inc" + } + + } + + return ""; +} + const std::string clava::getClassName(const Attr* A) { - const std::string kindName = clava::ATTRIBUTES[A->getKind()]; + + //const std::string kindName = clava::ATTRIBUTES[A->getKind()]; + const std::string kindName = clava::getAttrKind(A); + return kindName + "Attr"; } diff --git a/ClangAstDumper/ClangNodes.h b/ClangAstDumper/ClangNodes.h index ee738948f..d081c8758 100644 --- a/ClangAstDumper/ClangNodes.h +++ b/ClangAstDumper/ClangNodes.h @@ -46,6 +46,15 @@ namespace clava { */ const std::string getClassName(const Type* T); + /** + * Returns the kind name of the class of the given Attribute. + * + * @param A + * @return + */ + const std::string getAttrKind(const Attr* A); + + /** * Returns the name of the class of the given Attribute. * diff --git a/ClangAstDumper/ClavaDataDumperAttrs.cpp b/ClangAstDumper/ClavaDataDumperAttrs.cpp index ffcd0f4b0..cd3164c4d 100644 --- a/ClangAstDumper/ClavaDataDumperAttrs.cpp +++ b/ClangAstDumper/ClavaDataDumperAttrs.cpp @@ -65,8 +65,7 @@ void clava::ClavaDataDumper::dump(clava::AttrNode attrNode, const Attr* A) { void clava::ClavaDataDumper::DumpAttrData(const Attr *A) { clava::dumpSourceInfo(Context, A->getRange().getBegin(), A->getRange().getEnd()); - // Print information about Attr - clava::dump(clava::ATTRIBUTES[A->getKind()]); + clava::dump(clava::getAttrKind(A)); clava::dump(A->isImplicit()); clava::dump(A->isInherited()); clava::dump(A->isLateParsed()); From ad4a48fc8660fd8eafdf7172392210cb89731b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:09:29 +0000 Subject: [PATCH 15/30] [ClangAstParser] Update related to enums --- .../clang/parsers/data/DeclDataParser.java | 2 +- .../clang/parsers/data/TypeDataParser.java | 2 +- .../clava/ast/attr/enums/AttributeKind.java | 38 +++++++++++++++++-- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/DeclDataParser.java b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/DeclDataParser.java index 6e39d96c7..ecaa167a8 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/DeclDataParser.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/DeclDataParser.java @@ -161,7 +161,7 @@ public static DataStore parseTagDeclData(LineStream lines, ClangAstData dataStor // data.set(NamedDecl.DECL_NAME, anonName); // } - data.add(TagDecl.TAG_KIND, LineStreamParsers.enumFromName(TagKind.class, lines)); + data.add(TagDecl.TAG_KIND, LineStreamParsers.enumFromName(TagKind.getHelper(), lines)); data.add(TagDecl.IS_COMPLETE_DEFINITION, LineStreamParsers.oneOrZero(lines)); return data; diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/TypeDataParser.java b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/TypeDataParser.java index 0544bc8f4..bf8a506c4 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/TypeDataParser.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/TypeDataParser.java @@ -232,7 +232,7 @@ public static DataStore parseTypeWithKeywordData(LineStream lines, ClangAstData DataStore data = parseTypeData(lines, parserData); data.add(TypeWithKeyword.ELABORATED_TYPE_KEYWORD, - LineStreamParsers.enumFromName(ElaboratedTypeKeyword.class, lines)); + LineStreamParsers.enumFromName(ElaboratedTypeKeyword.getHelper(), lines)); return data; } diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/enums/AttributeKind.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/enums/AttributeKind.java index f151bce96..96bc6bb6d 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/enums/AttributeKind.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/enums/AttributeKind.java @@ -26,7 +26,9 @@ public enum AttributeKind implements StringProvider { AddressSpace, + AnnotateType, ArmMveStrictPolymorphism, + BTFTypeTag, CmseNSCall, NoDeref, ObjCGC, @@ -49,10 +51,16 @@ public enum AttributeKind implements StringProvider { UPtr, FallThrough, Likely, + MustTail, + OpenCLUnrollHint, Suppress, Unlikely, + AlwaysInline, + NoInline, NoMerge, + AArch64SVEPcs, AArch64VectorPcs, + AMDGPUKernelCall, AcquireHandle, AnyX86NoCfCheck, CDecl, @@ -68,10 +76,12 @@ public enum AttributeKind implements StringProvider { PreserveMost, RegCall, StdCall, + SwiftAsyncCall, SwiftCall, SysVABI, ThisCall, VectorCall, + SwiftAsyncContext, SwiftContext, SwiftErrorResult, SwiftIndirectResult, @@ -100,7 +110,6 @@ public enum AttributeKind implements StringProvider { AllocAlign, AllocSize, AlwaysDestroy, - AlwaysInline, AnalyzerNoReturn, AnyX86Interrupt, AnyX86NoCallerSavedRegisters, @@ -116,6 +125,7 @@ public enum AttributeKind implements StringProvider { Assumption, Availability, BPFPreserveAccessIndex, + BTFDeclTag, Blocks, Builtin, C11NoReturn, @@ -159,13 +169,16 @@ public enum AttributeKind implements StringProvider { DLLImportStaticLocal, Deprecated, Destructor, + DiagnoseAsBuiltin, DiagnoseIf, + DisableSanitizerInstrumentation, DisableTailCalls, EmptyBases, EnableIf, EnforceTCB, EnforceTCBLeaf, EnumExtensibility, + Error, ExcludeFromExplicitInstantiation, ExclusiveTrylockFunction, ExternalSourceSymbol, @@ -174,10 +187,14 @@ public enum AttributeKind implements StringProvider { Flatten, Format, FormatArg, + FunctionReturnThunks, GNUInline, GuardedBy, GuardedVar, HIPManaged, + HLSLNumThreads, + HLSLSV_GroupIndex, + HLSLShader, Hot, IBAction, IBOutlet, @@ -189,6 +206,7 @@ public enum AttributeKind implements StringProvider { Leaf, LockReturned, LocksExcluded, + M68kInterrupt, MIGServerRoutine, MSAllocator, MSInheritance, @@ -215,10 +233,11 @@ public enum AttributeKind implements StringProvider { NoDebug, NoDestroy, NoDuplicate, - NoInline, NoInstrumentFunction, NoMicroMips, NoMips16, + NoProfileFunction, + NoRandomizeLayout, NoReturn, NoSanitize, NoSpeculativeLoadHardening, @@ -255,7 +274,6 @@ public enum AttributeKind implements StringProvider { ObjCSubclassingRestricted, OpenCLIntelReqdSubGroupSize, OpenCLKernel, - OpenCLUnrollHint, OptimizeNone, Override, Owner, @@ -274,15 +292,18 @@ public enum AttributeKind implements StringProvider { PtGuardedVar, Pure, RISCVInterrupt, + RandomizeLayout, Reinitializes, ReleaseCapability, ReqdWorkGroupSize, RequiresCapability, Restrict, + Retain, ReturnTypestate, ReturnsNonNull, ReturnsTwice, SYCLKernel, + SYCLSpecialClass, ScopedLockable, Section, SelectAny, @@ -290,8 +311,10 @@ public enum AttributeKind implements StringProvider { SetTypestate, SharedTrylockFunction, SpeculativeLoadHardening, + StandaloneDebug, StrictFP, SwiftAsync, + SwiftAsyncError, SwiftAsyncName, SwiftAttr, SwiftBridge, @@ -302,6 +325,7 @@ public enum AttributeKind implements StringProvider { SwiftPrivate, TLSModel, Target, + TargetClones, TestTypestate, TransparentUnion, TrivialABI, @@ -312,6 +336,7 @@ public enum AttributeKind implements StringProvider { Uninitialized, Unused, Used, + UsingIfExists, Uuid, VecReturn, VecTypeHint, @@ -328,9 +353,11 @@ public enum AttributeKind implements StringProvider { X86ForceAlignArgPointer, XRayInstrument, XRayLogArgs, + ZeroCallUsedRegs, AbiTag, Alias, AlignValue, + BuiltinAlias, CalledOnce, IFunc, InitSeg, @@ -407,6 +434,11 @@ private static String toAttributeName(AttributeKind kind) { return name.toLowerCase(); } + // Special case: TypeVisibility attribute is "visibility" + if (kind == TypeVisibility) { + name = Visibility.name(); + } + return SpecsStrings.camelCaseSeparate(name, "_").toLowerCase(); } From 200f6f017a1c94db160a65f830c6eb7a544d01c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:12:35 +0000 Subject: [PATCH 16/30] [ClavaAst] Experiment with attribute code generation --- ClavaAst/src/pt/up/fe/specs/clava/ast/decl/Decl.java | 10 ++++++++-- .../src/pt/up/fe/specs/clava/ast/decl/RecordDecl.java | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/Decl.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/Decl.java index 45778bd58..9abe84255 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/Decl.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/Decl.java @@ -84,21 +84,27 @@ public boolean hasAttribute(AttributeKind kind) { } public String getAttributesCode() { + // return getAttributesCode(get(ATTRIBUTES), true, true); + // } + // + // public String getAttributesCode(List attrs, boolean addNewline, boolean ignoreGenericAttrs) { + List attrs = get(ATTRIBUTES); var code = new StringBuilder(); - for (Attribute attr : get(ATTRIBUTES)) { + for (Attribute attr : attrs) { // If generic class, do not generated code for it + // if (ignoreGenericAttrs && attr.getClass().equals(Attribute.class)) { if (attr.getClass().equals(Attribute.class)) { ClavaLog.info( "Attribute '" + attr.getKind() + "' not implemented, not generating code for it"); continue; } - code.append(attr.getCode()); if (attr.getKind().isInline()) { code.append(" "); + // } else if (addNewline) { } else { code.append("\n"); } diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/RecordDecl.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/RecordDecl.java index 0ac1b919d..a8a23b45d 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/RecordDecl.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/RecordDecl.java @@ -85,7 +85,11 @@ protected String getCode(List bases, List te code.append(getTagKind().getCode()); // Add attributes - // recordDeclData.getAttributes().forEach(attr -> code.append(" ").append(attr.getCode())); + // var preAttributes = get(ATTRIBUTES).stream() + // .filter(attr -> !attr.isPostAttr()) + // .collect(Collectors.toList()); + // + // String preAttributesCode = getAttributesCode(preAttributes, false, false); String preAttributesCode = get(ATTRIBUTES).stream() .filter(attr -> !attr.isPostAttr()) From 70ac3d502471aec53e141dd3f1d73c46fac22b5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:16:13 +0000 Subject: [PATCH 17/30] [ClavaAst] Renames TypeVisibilityAttr --- .../{TypeVisibilityAttr.java => TypeVisibilityAttr_.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename ClavaAst/src/pt/up/fe/specs/clava/ast/attr/{TypeVisibilityAttr.java => TypeVisibilityAttr_.java} (84%) diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java similarity index 84% rename from ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr.java rename to ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java index bc2e23827..e46ffaac6 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java @@ -19,9 +19,9 @@ import pt.up.fe.specs.clava.ClavaNode; -public class TypeVisibilityAttr extends InheritableAttr { +public class TypeVisibilityAttr_ extends InheritableAttr { - public TypeVisibilityAttr(DataStore data, Collection children) { + public TypeVisibilityAttr_(DataStore data, Collection children) { super(data, children); } From 97266e1b9f392327996c2f063d35c480f2b25ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:16:29 +0000 Subject: [PATCH 18/30] [ClavaAst] Removes TypeVisibilityAttr_ --- .../clava/ast/attr/TypeVisibilityAttr_.java | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java deleted file mode 100644 index e46ffaac6..000000000 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/attr/TypeVisibilityAttr_.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright 2018 SPeCS. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. under the License. - */ - -package pt.up.fe.specs.clava.ast.attr; - -import java.util.Collection; - -import org.suikasoft.jOptions.Interfaces.DataStore; - -import pt.up.fe.specs.clava.ClavaNode; - -public class TypeVisibilityAttr_ extends InheritableAttr { - - public TypeVisibilityAttr_(DataStore data, Collection children) { - super(data, children); - } - -} From f6b17e424d03f0e1719678d5aef9123f10a2868a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:21:25 +0000 Subject: [PATCH 19/30] [ClangAstDumper] Removes references to TypeVisibilityAttr --- ClangAstDumper/ClangEnums.h | 2 +- ClangAstDumper/ClavaConstants.cpp | 2 +- ClangAstDumper/ClavaConstants.h | 2 +- ClangAstDumper/ClavaDataDumper.h | 2 +- ClangAstDumper/ClavaDataDumperAttrs.cpp | 9 +++++---- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ClangAstDumper/ClangEnums.h b/ClangAstDumper/ClangEnums.h index 56ab18c3b..6a82cbb65 100644 --- a/ClangAstDumper/ClangEnums.h +++ b/ClangAstDumper/ClangEnums.h @@ -18,7 +18,7 @@ namespace clava { /* Clang Enums */ extern const std::string CAST_KIND[]; - extern const std::string ATTRIBUTES[]; + extern const std::string ATTRIBUTES[]; // Deprecated, no not use. Instead, use clava::getAttrKind(const Attr* A) extern const std::string CALLING_CONVENTION[]; extern const std::string REFERENCE_QUALIFIER[]; extern const std::string EXCEPTION_SPECIFICATION_TYPE[]; diff --git a/ClangAstDumper/ClavaConstants.cpp b/ClangAstDumper/ClavaConstants.cpp index 426d4327f..99d373d58 100644 --- a/ClangAstDumper/ClavaConstants.cpp +++ b/ClangAstDumper/ClavaConstants.cpp @@ -145,7 +145,7 @@ const std::string clava::getName(const AttrNode attrNode) { case clava::AttrNode::FORMAT: return "FormatAttr"; case clava::AttrNode::NON_NULL: return "NonNullAttr"; case clava::AttrNode::VISIBILITY: return "VisibilityAttr"; - case clava::AttrNode::TYPE_VISIBILITY: return "TypeVisibilityAttr"; + //case clava::AttrNode::TYPE_VISIBILITY: return "TypeVisibilityAttr"; default: { std::string enumValue = std::to_string(static_cast::type>(attrNode)); diff --git a/ClangAstDumper/ClavaConstants.h b/ClangAstDumper/ClavaConstants.h index 4a363b0e8..a01138b19 100644 --- a/ClangAstDumper/ClavaConstants.h +++ b/ClangAstDumper/ClavaConstants.h @@ -155,7 +155,7 @@ namespace clava { FORMAT, NON_NULL, VISIBILITY, - TYPE_VISIBILITY, + //TYPE_VISIBILITY, }; diff --git a/ClangAstDumper/ClavaDataDumper.h b/ClangAstDumper/ClavaDataDumper.h index de9a25d3a..12204e06d 100644 --- a/ClangAstDumper/ClavaDataDumper.h +++ b/ClangAstDumper/ClavaDataDumper.h @@ -238,7 +238,7 @@ namespace clava { void DumpFormatAttrData(const FormatAttr *A); void DumpNonNullAttrData(const NonNullAttr *A); void DumpVisibilityAttrData(const VisibilityAttr *A); - void DumpTypeVisibilityAttrData(const TypeVisibilityAttr *A); + //void DumpTypeVisibilityAttrData(const TypeVisibilityAttr *A); const std::string getDataName(DeclNode node); const std::string getDataName(StmtNode node); const std::string getDataName(TypeNode node); diff --git a/ClangAstDumper/ClavaDataDumperAttrs.cpp b/ClangAstDumper/ClavaDataDumperAttrs.cpp index cd3164c4d..1efd82b3f 100644 --- a/ClangAstDumper/ClavaDataDumperAttrs.cpp +++ b/ClangAstDumper/ClavaDataDumperAttrs.cpp @@ -15,7 +15,7 @@ const std::map clava::ATTR_DATA_MAP = { {"FormatAttr", clava::AttrNode::FORMAT}, {"NonNullAttr", clava::AttrNode::NON_NULL}, {"VisibilityAttr", clava::AttrNode::VISIBILITY}, - {"TypeVisibilityAttr", clava::AttrNode::TYPE_VISIBILITY}, + //{"TypeVisibilityAttr", clava::AttrNode::TYPE_VISIBILITY}, }; @@ -54,8 +54,8 @@ void clava::ClavaDataDumper::dump(clava::AttrNode attrNode, const Attr* A) { DumpNonNullAttrData(static_cast(A)); break; case clava::AttrNode::VISIBILITY: DumpVisibilityAttrData(static_cast(A)); break; - case clava::AttrNode::TYPE_VISIBILITY: - DumpTypeVisibilityAttrData(static_cast(A)); break; + //case clava::AttrNode::TYPE_VISIBILITY: + // DumpTypeVisibilityAttrData(static_cast(A)); break; default: throw std::invalid_argument("ClangDataDumper::dump(DeclNode):: Case not implemented, '" + getName(attrNode) + "'"); } @@ -125,10 +125,11 @@ void clava::ClavaDataDumper::DumpVisibilityAttrData(const VisibilityAttr *A) { clava::dump(clava::VISIBILITY_ATTR_TYPE[A->getVisibility()]); } - +/* void clava::ClavaDataDumper::DumpTypeVisibilityAttrData(const TypeVisibilityAttr *A) { // Common DumpAttrData(A); clava::dump(clava::VISIBILITY_ATTR_TYPE[A->getVisibility()]); } + */ From 1137e0dbd778408933bf3ca177be3d2bd854973d Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Sun, 19 Feb 2023 00:24:50 +0000 Subject: [PATCH 20/30] [ClangAstDumper] Specify clang version --- .gitignore | 3 +++ ClangAstDumper/CMakeLists.txt | 4 ++-- ClangAstDumper/clang_enums/CMakeLists.txt | 4 ++-- ClangAstDumper/clang_enums/config.clava | 2 +- ...{Findllvm14.cmake => Findllvm14.0.6.cmake} | 20 +++++++++---------- 5 files changed, 18 insertions(+), 15 deletions(-) rename deps/{Findllvm14.cmake => Findllvm14.0.6.cmake} (90%) diff --git a/.gitignore b/.gitignore index da69e850c..13e863479 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,9 @@ RemoteSystemsTempFiles/ # Custom ignores # ################## +.vscode +deps/temp + tomJava/ .svn/ sf.eclipse.javacc.prefs diff --git a/ClangAstDumper/CMakeLists.txt b/ClangAstDumper/CMakeLists.txt index 3188a998c..1dc1fb2c6 100644 --- a/ClangAstDumper/CMakeLists.txt +++ b/ClangAstDumper/CMakeLists.txt @@ -15,9 +15,9 @@ include("../deps.cmake") #deps_find_package(llvm3.8 REQUIRED) # LLVM #deps_find_package(llvm7 REQUIRED) # LLVM #deps_find_package(llvm12 REQUIRED) # LLVM -deps_find_package(llvm14 REQUIRED) # LLVM +deps_find_package(llvm14.0.6 REQUIRED) # LLVM -set(COMMON_CXX_FLAGS "-std=c++14 -O3 -Wall -Wno-unused-function") +set(COMMON_CXX_FLAGS "-std=c++20 -O3 -Wall -Wno-unused-function") #-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DVISIT_CHECK #add_definitions(-DOLD_OUTPUT) diff --git a/ClangAstDumper/clang_enums/CMakeLists.txt b/ClangAstDumper/clang_enums/CMakeLists.txt index b1238cb14..eebdeb157 100644 --- a/ClangAstDumper/clang_enums/CMakeLists.txt +++ b/ClangAstDumper/clang_enums/CMakeLists.txt @@ -8,10 +8,10 @@ include("../../deps.cmake") #deps_find_package(llvm3.8 REQUIRED) # LLVM #deps_find_package(llvm7 REQUIRED) # LLVM #deps_find_package(llvm12 REQUIRED) # LLVM -deps_find_package(llvm14 REQUIRED) # LLVM +deps_find_package(llvm14.0.6 REQUIRED) # LLVM # Set base llvm dir -set(LLVM_DIR ${llvm14_DIR}) +set(LLVM_DIR ${llvm14.0.6_DIR}) set(COMMON_CXX_FLAGS "-O3 -Wall -Wno-unused-function") diff --git a/ClangAstDumper/clang_enums/config.clava b/ClangAstDumper/clang_enums/config.clava index 0aab5c824..8ffbc5845 100644 --- a/ClangAstDumper/clang_enums/config.clava +++ b/ClangAstDumper/clang_enums/config.clava @@ -131,7 +131,7 @@ argv - {"llvmFolder":"C:/Users/JBispo/Work/Repos/Lab/clava/deps/deps-lib/../artifacts/llvm14-Windows-gcc5"} + {"llvmFolder":"C:/Users/JBispo/Work/Repos/Lab/clava/deps/deps-lib/../artifacts/llvm14.0.6-Windows-gcc5"} tools diff --git a/deps/Findllvm14.cmake b/deps/Findllvm14.0.6.cmake similarity index 90% rename from deps/Findllvm14.cmake rename to deps/Findllvm14.0.6.cmake index df2d26680..edbf63158 100644 --- a/deps/Findllvm14.cmake +++ b/deps/Findllvm14.0.6.cmake @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.2) # Download library -deps_resolve("llvm14" LIB_DIR) +deps_resolve("llvm14.0.6" LIB_DIR) # Expose LLVM library -set("llvm14_DIR" ${LIB_DIR}) +set("llvm14.0.6_DIR" ${LIB_DIR}) # LLVM requires C++11 -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") if(UNIX) # Unix version uses pre-build clang binaries, which disable rtti @@ -16,7 +16,7 @@ endif() #LLVM and Clang includes -list(APPEND llvm14_INCLUDES +list(APPEND llvm14.0.6_INCLUDES "${LIB_DIR}/src/include" "${LIB_DIR}/build/include" ) @@ -45,8 +45,8 @@ endif() -#find_libraries(llvm14_LIBRARIES "${LIB_DIR}/build/lib" -list(APPEND llvm14_LIBRARIES +#find_libraries(llvm14.0.6_LIBRARIES "${LIB_DIR}/build/lib" +list(APPEND llvm14.0.6_LIBRARIES # Clang libraries, they have circular dependencies, so they are inside a group ${LINKER_GROUP_START} @@ -166,7 +166,7 @@ list(APPEND llvm14_LIBRARIES LLVMBinaryFormat LLVMTableGen LLVMSupport - LLVMDemangle + LLVMDemangle ) @@ -174,7 +174,7 @@ list(APPEND llvm14_LIBRARIES if(UNIX AND NOT APPLE) # Generic UNIX dependencies - list(APPEND llvm14_LIBRARIES + list(APPEND llvm14.0.6_LIBRARIES rt tinfo z @@ -183,7 +183,7 @@ if(UNIX AND NOT APPLE) ) elseif(APPLE) # macOS dependencies - list(APPEND llvm14_LIBRARIES + list(APPEND llvm14.0.6_LIBRARIES c++abi #stdc++ z @@ -193,7 +193,7 @@ elseif(APPLE) ) elseif(WIN32) # Windows dependencies - list(APPEND llvm14_LIBRARIES + list(APPEND llvm14.0.6_LIBRARIES version z ) From fb35d2690b160af07a571e0450d37b7fdedf2de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:38:04 +0000 Subject: [PATCH 21/30] [ClangAstParser] Updates web resources for Windows and Ubuntu for v14.0.6 --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index 5a99ea4c4..74d0120bf 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -25,12 +25,12 @@ static WebResourceProvider create(String resourceUrl) { return WebResourceProvider.newInstance("http://specs.fe.up.pt/resources/clangast/", resourceUrl); } - WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v12.0.1.zip", "v12.0.1"); + WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v16.0.4.zip", "v16.0.4"); // WebResourceProvider LIBC_CXX = create("libcxx_7.0.1.zip", "v1.0"); - WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v12.0.1"); + WebResourceProvider LIBC_CXX = create("libc_cxx_v16.0.4.zip", "v16.0.4"); // WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx_windows.zip", "v1.0"); - WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx_windows.zip_", "v12.0.1"); + WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx.zip", "v16.0.4"); // For some reason, on Linux, this file no longer downloads WebResourceProvider CUDA_LIB = create("cudalib.zip_", "v11.3.0"); @@ -39,11 +39,11 @@ static WebResourceProvider create(String resourceUrl) { // WebResourceProvider LIBC_CXX_LINUX = create("libc_cxx_linux.zip", "v1.0"); // WebResourceProvider LIBC_CXX_CENTOS6 = create("libc_cxx_centos6.zip", "v1.0"); - WebResourceProvider WIN_EXE = create("windows/clang_ast.exe", "v12.0.7"); + WebResourceProvider WIN_EXE = create("windows/clang_ast.exe", "v14.0.6_0"); WebResourceProvider WIN_DLL1 = create("windows/libwinpthread-1.dll"); WebResourceProvider WIN_DLL2 = create("windows/zlib1.dll"); - WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang_ast", "v12.0.7"); + WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang_ast", "v14.0.6_0"); // Disabled while we do not have an updated Odroid WebResourceProvider LINUX_ARMV7_EXE = create("linux_ubuntu_14_armv7/clang_ast", "v4.2.19"); From c7f6b444a2936f56792675a1403d0e59309f87c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bi=5B=5Dspo?= Date: Sun, 19 Feb 2023 02:45:01 +0000 Subject: [PATCH 22/30] [ClangAstParser] Fixes libcxx web resource for Linux --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index 74d0120bf..c9d1a03d4 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -27,7 +27,7 @@ static WebResourceProvider create(String resourceUrl) { WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v16.0.4.zip", "v16.0.4"); // WebResourceProvider LIBC_CXX = create("libcxx_7.0.1.zip", "v1.0"); - WebResourceProvider LIBC_CXX = create("libc_cxx_v16.0.4.zip", "v16.0.4"); + WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v16.0.4"); // WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx_windows.zip", "v1.0"); WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx.zip", "v16.0.4"); From 8174d37f640d557f6b63bc99572e9aa3cdb12663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 02:53:51 +0000 Subject: [PATCH 23/30] [ClangAstParser] Fixes versions of libc and libcxx --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index c9d1a03d4..c70308e65 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -25,12 +25,12 @@ static WebResourceProvider create(String resourceUrl) { return WebResourceProvider.newInstance("http://specs.fe.up.pt/resources/clangast/", resourceUrl); } - WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v16.0.4.zip", "v16.0.4"); + WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v14.0.6.zip", "v14.0.6"); // WebResourceProvider LIBC_CXX = create("libcxx_7.0.1.zip", "v1.0"); - WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v16.0.4"); + WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v14.0.6"); // WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx_windows.zip", "v1.0"); - WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx.zip", "v16.0.4"); + WebResourceProvider LIBC_CXX_WINDOWS = create("libc_cxx.zip", "v14.0.6"); // For some reason, on Linux, this file no longer downloads WebResourceProvider CUDA_LIB = create("cudalib.zip_", "v11.3.0"); From 847b87ca575069a82596f936b2870d3568c162d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 03:19:31 +0000 Subject: [PATCH 24/30] [ClangAstParser] Updates builtins web resources --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index c70308e65..6f3abc94e 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -25,7 +25,7 @@ static WebResourceProvider create(String resourceUrl) { return WebResourceProvider.newInstance("http://specs.fe.up.pt/resources/clangast/", resourceUrl); } - WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v14.0.6.zip", "v14.0.6"); + WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v14.0.6.zip_", "v14.0.6_2"); // WebResourceProvider LIBC_CXX = create("libcxx_7.0.1.zip", "v1.0"); WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v14.0.6"); From cea20926cba39497de7006ac82274f75707bb785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 03:20:26 +0000 Subject: [PATCH 25/30] [deps] Updates clang instructions --- deps/deps-lib/build-instructions/LLVM-Clang.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/deps/deps-lib/build-instructions/LLVM-Clang.txt b/deps/deps-lib/build-instructions/LLVM-Clang.txt index 8fa5b590a..a5404dbfb 100644 --- a/deps/deps-lib/build-instructions/LLVM-Clang.txt +++ b/deps/deps-lib/build-instructions/LLVM-Clang.txt @@ -5,9 +5,11 @@ CLANG Was able to build Clang+LLVM using the instructions on GitHub, with the following commands: -cmake -S llvm -B build -G "MinGW Makefiles" -DLLVM_ENABLE_PROJECTS='clang' -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On +(could also build libcas a projet, but last time it did not work) -cmake --build build +cmake -S llvm -B build -G "MinGW Makefiles" -DLLVM_ENABLE_PROJECTS='clang;openmp' -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_TARGETS_TO_BUILD=X86 + +cmake --build build -j 7 (llvm7) From 1e7a6f8bc6471287c46503e359302d22dbda2bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 11:27:55 +0000 Subject: [PATCH 26/30] [ClangAstParser] Adds omp.h to builtin includes --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index 6f3abc94e..39446e945 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -25,7 +25,7 @@ static WebResourceProvider create(String resourceUrl) { return WebResourceProvider.newInstance("http://specs.fe.up.pt/resources/clangast/", resourceUrl); } - WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v14.0.6.zip_", "v14.0.6_2"); + WebResourceProvider BUILTIN_INCLUDES = create("clang_builtin_includes_v14.0.6.zip_", "v14.0.6_3"); // WebResourceProvider LIBC_CXX = create("libcxx_7.0.1.zip", "v1.0"); WebResourceProvider LIBC_CXX = create("libc_cxx.zip", "v14.0.6"); From 899bda98265db7e2046e8b2273c079258242f92e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 11:28:34 +0000 Subject: [PATCH 27/30] [ClavaWeaver] Update C++ test 'OmpThreadsExplore' --- .../test/weaver/cpp/results/OmpThreadsExplore.lara.txt | 2 +- .../clava/test/weaver/cpp/src/omp_threads_explore.cpp | 2 +- .../test/pt/up/fe/specs/cxxweaver/tests/CxxTest.java | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ClavaWeaver/resources/clava/test/weaver/cpp/results/OmpThreadsExplore.lara.txt b/ClavaWeaver/resources/clava/test/weaver/cpp/results/OmpThreadsExplore.lara.txt index 0df8aa459..c1f0a5dca 100644 --- a/ClavaWeaver/resources/clava/test/weaver/cpp/results/OmpThreadsExplore.lara.txt +++ b/ClavaWeaver/resources/clava/test/weaver/cpp/results/OmpThreadsExplore.lara.txt @@ -17,7 +17,7 @@ int main() { omp_set_num_threads(omp_thread_measure); omp_thread_measure_loop1 << omp_thread_measure; - #pragma omp parallel for reduction(min : a, i) + #pragma omp parallel for reduction(min : a) for(int i = 0; i < 10; i++) { a += i; } diff --git a/ClavaWeaver/resources/clava/test/weaver/cpp/src/omp_threads_explore.cpp b/ClavaWeaver/resources/clava/test/weaver/cpp/src/omp_threads_explore.cpp index b19b36843..a9d89adc8 100644 --- a/ClavaWeaver/resources/clava/test/weaver/cpp/src/omp_threads_explore.cpp +++ b/ClavaWeaver/resources/clava/test/weaver/cpp/src/omp_threads_explore.cpp @@ -4,7 +4,7 @@ int main() { #pragma lara marker loop1 { - #pragma omp parallel for reduction( min : a, i ) + #pragma omp parallel for reduction( min : a ) for(int i=0; i<10; i++) { a += i; } diff --git a/ClavaWeaver/test/pt/up/fe/specs/cxxweaver/tests/CxxTest.java b/ClavaWeaver/test/pt/up/fe/specs/cxxweaver/tests/CxxTest.java index 8042233fd..9691f4f53 100644 --- a/ClavaWeaver/test/pt/up/fe/specs/cxxweaver/tests/CxxTest.java +++ b/ClavaWeaver/test/pt/up/fe/specs/cxxweaver/tests/CxxTest.java @@ -17,11 +17,13 @@ import org.junit.BeforeClass; import org.junit.Test; +import pt.up.fe.specs.clava.ClavaOptions; import pt.up.fe.specs.clava.language.Standard; import pt.up.fe.specs.clava.weaver.options.CxxWeaverOption; import pt.up.fe.specs.cxxweaver.ClavaWeaverTester; import pt.up.fe.specs.util.SpecsLogs; import pt.up.fe.specs.util.SpecsSystem; +import pt.up.fe.specs.util.utilities.StringList; public class CxxTest { @@ -103,7 +105,9 @@ public void testHdf5Types() { @Test public void testOmpThreadsExplore() { - newTester().test("OmpThreadsExplore.lara", "omp_threads_explore.cpp"); + newTester() + .set(ClavaOptions.FLAGS_LIST, StringList.newInstance("-fopenmp=libomp")) + .test("OmpThreadsExplore.lara", "omp_threads_explore.cpp"); } @Test From e13349856f7612e925560e3b3a29bcf70830e915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 13:27:01 +0000 Subject: [PATCH 28/30] [ClangAstParser] Updates dumper binary for Linux --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index 39446e945..279b3a4de 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -43,7 +43,7 @@ static WebResourceProvider create(String resourceUrl) { WebResourceProvider WIN_DLL1 = create("windows/libwinpthread-1.dll"); WebResourceProvider WIN_DLL2 = create("windows/zlib1.dll"); - WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang_ast", "v14.0.6_0"); + WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang_ast", "v14.0.6_0_1"); // Disabled while we do not have an updated Odroid WebResourceProvider LINUX_ARMV7_EXE = create("linux_ubuntu_14_armv7/clang_ast", "v4.2.19"); From 13ec9f9ef680968e042622dd1f661e1e94fb1e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Sun, 19 Feb 2023 13:48:01 +0000 Subject: [PATCH 29/30] [ClangAstParser] Removes commented code --- .../src/pt/up/fe/specs/clang/ClangAstWebResource.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index 279b3a4de..52c290f8d 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -35,10 +35,6 @@ static WebResourceProvider create(String resourceUrl) { // For some reason, on Linux, this file no longer downloads WebResourceProvider CUDA_LIB = create("cudalib.zip_", "v11.3.0"); - // WebResourceProvider LIBC_CXX_MAC_OS = create("libc_cxx_mac_os.zip", "v1.0"); - // WebResourceProvider LIBC_CXX_LINUX = create("libc_cxx_linux.zip", "v1.0"); - // WebResourceProvider LIBC_CXX_CENTOS6 = create("libc_cxx_centos6.zip", "v1.0"); - WebResourceProvider WIN_EXE = create("windows/clang_ast.exe", "v14.0.6_0"); WebResourceProvider WIN_DLL1 = create("windows/libwinpthread-1.dll"); WebResourceProvider WIN_DLL2 = create("windows/zlib1.dll"); From 1cc864dd9a8ecd0feda81b05024f3a87ae3f8751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bispo?= Date: Thu, 23 Feb 2023 19:25:16 +0000 Subject: [PATCH 30/30] [ClangAstDumper] Downgrades C++ standard from 20 to 17 --- ClangAstDumper/CMakeLists.txt | 2 +- deps/Findllvm14.0.6.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ClangAstDumper/CMakeLists.txt b/ClangAstDumper/CMakeLists.txt index 1dc1fb2c6..a93ad78ca 100644 --- a/ClangAstDumper/CMakeLists.txt +++ b/ClangAstDumper/CMakeLists.txt @@ -17,7 +17,7 @@ include("../deps.cmake") #deps_find_package(llvm12 REQUIRED) # LLVM deps_find_package(llvm14.0.6 REQUIRED) # LLVM -set(COMMON_CXX_FLAGS "-std=c++20 -O3 -Wall -Wno-unused-function") +set(COMMON_CXX_FLAGS "-std=c++17 -O3 -Wall -Wno-unused-function") #-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DVISIT_CHECK #add_definitions(-DOLD_OUTPUT) diff --git a/deps/Findllvm14.0.6.cmake b/deps/Findllvm14.0.6.cmake index edbf63158..8be641f16 100644 --- a/deps/Findllvm14.0.6.cmake +++ b/deps/Findllvm14.0.6.cmake @@ -7,7 +7,7 @@ deps_resolve("llvm14.0.6" LIB_DIR) set("llvm14.0.6_DIR" ${LIB_DIR}) # LLVM requires C++11 -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") if(UNIX) # Unix version uses pre-build clang binaries, which disable rtti