Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clang 14.0.6 #114

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
8740234
Adds deps package for llvm14
joaobispo Feb 17, 2023
d8e1420
[ClangAstDumper] Updates LLVM library from 12 to 14
joaobispo Feb 17, 2023
8eca095
[ClangASTDumper] Fix breaking changes caused by llvm version bump
lm-sousa Feb 17, 2023
53ebed1
[deps] Updates LLVM libraries in llvm14 package
joaobispo Feb 18, 2023
39b0460
Merge branch 'clang-14.0.6' of https://github.com/specs-feup/clava in…
joaobispo Feb 18, 2023
3984f8a
[ClangAstDumper] Fixes use of Expected in main.cpp
joaobispo Feb 18, 2023
5bd8951
[ClangAstDumper] Updates method for generating enums
joaobispo Feb 18, 2023
f0649ce
[ClangAstDumper] Updates (auto-generated) enums
joaobispo Feb 18, 2023
c51da22
[ClangAstDumper] Adds support for attribute TypeVisibilityAttr
joaobispo Feb 18, 2023
f3c2ef6
[ClavaAst] Updates several enums
joaobispo Feb 19, 2023
0f06f32
[ClavaAst] Adds new nodes
joaobispo Feb 19, 2023
8081fdc
[ClangAstParser] Moves tests that do not pass yet to their own package
joaobispo Feb 19, 2023
0121033
[ClangAstParser] Updates C++ test 'Decl'
joaobispo Feb 19, 2023
cdbfb0c
[ClavaWeaver] Updates C++ API test 'Subset'
joaobispo Feb 19, 2023
a52ef42
[ClangAstDumper] Fixes dumping of attributes names
joaobispo Feb 19, 2023
ad4a48f
[ClangAstParser] Update related to enums
joaobispo Feb 19, 2023
200f6f0
[ClavaAst] Experiment with attribute code generation
joaobispo Feb 19, 2023
70ac3d5
[ClavaAst] Renames TypeVisibilityAttr
joaobispo Feb 19, 2023
97266e1
[ClavaAst] Removes TypeVisibilityAttr_
joaobispo Feb 19, 2023
f6b17e4
[ClangAstDumper] Removes references to TypeVisibilityAttr
joaobispo Feb 19, 2023
1137e0d
[ClangAstDumper] Specify clang version
lm-sousa Feb 19, 2023
fb35d26
[ClangAstParser] Updates web resources for Windows and Ubuntu for v14…
joaobispo Feb 19, 2023
2f5b8f9
Merge branch 'clang-14.0.6' of https://github.com/specs-feup/clava in…
joaobispo Feb 19, 2023
c7f6b44
[ClangAstParser] Fixes libcxx web resource for Linux
joaobispo Feb 19, 2023
8174d37
[ClangAstParser] Fixes versions of libc and libcxx
joaobispo Feb 19, 2023
847b87c
[ClangAstParser] Updates builtins web resources
joaobispo Feb 19, 2023
cea2092
[deps] Updates clang instructions
joaobispo Feb 19, 2023
1e7a6f8
[ClangAstParser] Adds omp.h to builtin includes
joaobispo Feb 19, 2023
899bda9
[ClavaWeaver] Update C++ test 'OmpThreadsExplore'
joaobispo Feb 19, 2023
e133498
[ClangAstParser] Updates dumper binary for Linux
joaobispo Feb 19, 2023
13ec9f9
[ClangAstParser] Removes commented code
joaobispo Feb 19, 2023
1cc864d
[ClangAstDumper] Downgrades C++ standard from 20 to 17
joaobispo Feb 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ RemoteSystemsTempFiles/
# Custom ignores #
##################

.vscode
deps/temp

tomJava/
.svn/
sf.eclipse.javacc.prefs
Expand Down
5 changes: 3 additions & 2 deletions ClangAstDumper/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ 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.0.6 REQUIRED) # LLVM

set(COMMON_CXX_FLAGS "-std=c++14 -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)
Expand Down
2 changes: 1 addition & 1 deletion ClangAstDumper/ClangEnums.h
Original file line number Diff line number Diff line change
Expand Up @@ -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[];
Expand Down
33 changes: 27 additions & 6 deletions ClangAstDumper/ClangNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@


#include <bitset>

#include <iostream>

using namespace clang;

Expand All @@ -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 "<undefined_attribute>";
}

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";
}

Expand Down Expand Up @@ -459,7 +479,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));
Expand All @@ -475,10 +498,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);
Expand Down
9 changes: 9 additions & 0 deletions ClangAstDumper/ClangNodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
1 change: 1 addition & 0 deletions ClangAstDumper/ClavaConstants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::underlying_type<AttrNode>::type>(attrNode));
Expand Down
1 change: 1 addition & 0 deletions ClangAstDumper/ClavaConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ namespace clava {
FORMAT,
NON_NULL,
VISIBILITY,
//TYPE_VISIBILITY,
};


Expand Down
1 change: 1 addition & 0 deletions ClangAstDumper/ClavaDataDumper.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
17 changes: 14 additions & 3 deletions ClangAstDumper/ClavaDataDumperAttrs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ const std::map<const std::string, clava::AttrNode > clava::ATTR_DATA_MAP = {
{"FormatAttr", clava::AttrNode::FORMAT},
{"NonNullAttr", clava::AttrNode::NON_NULL},
{"VisibilityAttr", clava::AttrNode::VISIBILITY},
//{"TypeVisibilityAttr", clava::AttrNode::TYPE_VISIBILITY},

};


Expand Down Expand Up @@ -52,6 +54,8 @@ void clava::ClavaDataDumper::dump(clava::AttrNode attrNode, const Attr* A) {
DumpNonNullAttrData(static_cast<const NonNullAttr*>(A)); break;
case clava::AttrNode::VISIBILITY:
DumpVisibilityAttrData(static_cast<const VisibilityAttr*>(A)); break;
//case clava::AttrNode::TYPE_VISIBILITY:
// DumpTypeVisibilityAttrData(static_cast<const TypeVisibilityAttr*>(A)); break;
default:
throw std::invalid_argument("ClangDataDumper::dump(DeclNode):: Case not implemented, '" + getName(attrNode) + "'");
}
Expand All @@ -61,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());
Expand Down Expand Up @@ -121,4 +124,12 @@ void clava::ClavaDataDumper::DumpVisibilityAttrData(const VisibilityAttr *A) {
DumpAttrData(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()]);
}
*/
10 changes: 3 additions & 7 deletions ClangAstDumper/ClavaDataDumperStmts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
5 changes: 3 additions & 2 deletions ClangAstDumper/ClavaDataDumperTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
15 changes: 11 additions & 4 deletions ClangAstDumper/clang_enums/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.0.6 REQUIRED) # LLVM

# Set base llvm dir
set(LLVM_DIR ${llvm12_DIR})
set(LLVM_DIR ${llvm14.0.6_DIR})

set(COMMON_CXX_FLAGS "-O3 -Wall -Wno-unused-function")

Expand All @@ -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")
Expand Down
121 changes: 121 additions & 0 deletions ClangAstDumper/clang_enums/ClangEnum.js
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading