Expand Up
@@ -16,23 +16,23 @@ using llvm::SmallVector;
using llvm::StringRef;
struct DeconstructedName {
DeconstructedName (llvm::StringRef name) : name{name} {}
DeconstructedName (llvm::ArrayRef<std::string> modules,
std::optional<std::string> host, llvm::StringRef name,
llvm::ArrayRef<std::int64_t > kinds)
: modules{modules.begin (), modules.end ()}, host{host}, name{name},
kinds{kinds.begin (), kinds.end ()} {}
llvm::ArrayRef<std::string> procs, std::int64_t blockId,
llvm::StringRef name, llvm::ArrayRef<std::int64_t > kinds)
: modules{modules.begin (), modules.end ()}, procs{procs.begin (),
procs.end ()},
blockId{blockId}, name{name}, kinds{kinds.begin (), kinds.end ()} {}
bool isObjEqual (const NameUniquer::DeconstructedName &actualObj) {
if ((actualObj.name == name) && (actualObj.modules == modules) &&
(actualObj.host == host) && (actualObj.kinds == kinds)) {
return true ;
}
return false ;
return actualObj.modules == modules && actualObj.procs == procs &&
actualObj.blockId == blockId && actualObj.name == name &&
actualObj.kinds == kinds;
}
private:
llvm::SmallVector<std::string> modules;
std::optional<std::string> host;
llvm::SmallVector<std::string> procs;
std::int64_t blockId;
std::string name;
llvm::SmallVector<std::int64_t > kinds;
};
Expand All
@@ -47,20 +47,11 @@ void validateDeconstructedName(
<< " Possible error: DeconstructedName mismatch" ;
}
TEST (InternalNamesTest, doBlockDataTest) {
std::string actual = NameUniquer::doBlockData (" blockdatatest" );
std::string actualBlank = NameUniquer::doBlockData (" " );
std::string expectedMangledName = " _QLblockdatatest" ;
std::string expectedMangledNameBlank = " _QL" ;
ASSERT_EQ (actual, expectedMangledName);
ASSERT_EQ (actualBlank, expectedMangledNameBlank);
}
TEST (InternalNamesTest, doCommonBlockTest) {
std::string actual = NameUniquer::doCommonBlock (" hello" );
std::string actualBlank = NameUniquer::doCommonBlock (" " );
std::string expectedMangledName = " _QBhello " ;
std::string expectedMangledNameBlank = " _QB " ;
std::string expectedMangledName = " _QChello " ;
std::string expectedMangledNameBlank = " _QC " ;
ASSERT_EQ (actual, expectedMangledName);
ASSERT_EQ (actualBlank, expectedMangledNameBlank);
}
Expand All
@@ -81,7 +72,7 @@ TEST(InternalNamesTest, doGeneratedTest) {
TEST (InternalNamesTest, doConstantTest) {
std::string actual =
NameUniquer::doConstant ({" mod1" , " mod2" }, {" foo" }, " Hello" );
NameUniquer::doConstant ({" mod1" , " mod2" }, {" foo" }, 0 , " Hello" );
std::string expectedMangledName = " _QMmod1Smod2FfooEChello" ;
ASSERT_EQ (actual, expectedMangledName);
}
Expand All
@@ -93,66 +84,59 @@ TEST(InternalNamesTest, doProcedureTest) {
}
TEST (InternalNamesTest, doTypeTest) {
std::string actual = NameUniquer::doType ({}, {}, " mytype" , {4 , -1 });
std::string actual = NameUniquer::doType ({}, {}, 0 , " mytype" , {4 , -1 });
std::string expectedMangledName = " _QTmytypeK4KN1" ;
ASSERT_EQ (actual, expectedMangledName);
}
TEST (InternalNamesTest, doIntrinsicTypeDescriptorTest) {
using IntrinsicType = fir::NameUniquer::IntrinsicType;
std::string actual =
NameUniquer::doIntrinsicTypeDescriptor ( {}, {}, IntrinsicType::REAL, 42 );
std::string expectedMangledName = " _QCrealK42 " ;
std::string actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, 0 , IntrinsicType::REAL, 42 );
std::string expectedMangledName = " _QYIrealK42 " ;
ASSERT_EQ (actual, expectedMangledName);
actual =
NameUniquer::doIntrinsicTypeDescriptor ( {}, {}, IntrinsicType::REAL, {});
expectedMangledName = " _QCrealK0 " ;
actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, 0 , IntrinsicType::REAL, {});
expectedMangledName = " _QYIrealK0 " ;
ASSERT_EQ (actual, expectedMangledName);
actual =
NameUniquer::doIntrinsicTypeDescriptor ( {}, {}, IntrinsicType::INTEGER, 3 );
expectedMangledName = " _QCintegerK3 " ;
actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, 0 , IntrinsicType::INTEGER, 3 );
expectedMangledName = " _QYIintegerK3 " ;
ASSERT_EQ (actual, expectedMangledName);
actual =
NameUniquer::doIntrinsicTypeDescriptor ( {}, {}, IntrinsicType::LOGICAL, 2 );
expectedMangledName = " _QClogicalK2 " ;
actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, 0 , IntrinsicType::LOGICAL, 2 );
expectedMangledName = " _QYIlogicalK2 " ;
ASSERT_EQ (actual, expectedMangledName);
actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, IntrinsicType::CHARACTER, 4 );
expectedMangledName = " _QCcharacterK4 " ;
{}, {}, 0 , IntrinsicType::CHARACTER, 4 );
expectedMangledName = " _QYIcharacterK4 " ;
ASSERT_EQ (actual, expectedMangledName);
actual =
NameUniquer::doIntrinsicTypeDescriptor ( {}, {}, IntrinsicType::COMPLEX, 4 );
expectedMangledName = " _QCcomplexK4 " ;
actual = NameUniquer::doIntrinsicTypeDescriptor (
{}, {}, 0 , IntrinsicType::COMPLEX, 4 );
expectedMangledName = " _QYIcomplexK4 " ;
ASSERT_EQ (actual, expectedMangledName);
}
TEST (InternalNamesTest, doDispatchTableTest) {
std::string actual =
NameUniquer::doDispatchTable ({}, {}, " MyTYPE" , {2 , 8 , 18 });
NameUniquer::doDispatchTable ({}, {}, 0 , " MyTYPE" , {2 , 8 , 18 });
std::string expectedMangledName = " _QDTmytypeK2K8K18" ;
ASSERT_EQ (actual, expectedMangledName);
}
TEST (InternalNamesTest, doTypeDescriptorTest) {
std::string actual = NameUniquer::doTypeDescriptor (
{StringRef (" moD1" )}, {StringRef (" foo" )}, " MyTYPE" , {2 , 8 });
std::string expectedMangledName = " _QMmod1FfooCTmytypeK2K8" ;
ASSERT_EQ (actual, expectedMangledName);
}
TEST (InternalNamesTest, doVariableTest) {
std::string actual = NameUniquer::doVariable (
{" mod1" , " mod2" }, {" " }, " intvar" ); // Function is present and is blank.
{" mod1" , " mod2" }, {" " }, 0 , " intvar" ); // Function is present and is blank.
std::string expectedMangledName = " _QMmod1Smod2FEintvar" ;
ASSERT_EQ (actual, expectedMangledName);
std::string actual2 = NameUniquer::doVariable (
{" mod1" , " mod2" }, {}, " intVariable" ); // Function is not present.
{" mod1" , " mod2" }, {}, 0 , " intVariable" ); // Function is not present.
std::string expectedMangledName2 = " _QMmod1Smod2Eintvariable" ;
ASSERT_EQ (actual2, expectedMangledName2);
}
Expand All
@@ -165,15 +149,15 @@ TEST(InternalNamesTest, doProgramEntry) {
TEST (InternalNamesTest, doNamelistGroup) {
std::string actual = NameUniquer::doNamelistGroup ({" mod1" }, {}, " nlg" );
std::string expectedMangledName = " _QMmod1Gnlg " ;
std::string expectedMangledName = " _QMmod1Nnlg " ;
ASSERT_EQ (actual, expectedMangledName);
}
TEST (InternalNamesTest, deconstructTest) {
std::pair actual = NameUniquer::deconstruct (" _QBhello " );
std::pair actual = NameUniquer::deconstruct (" _QChello " );
auto expectedNameKind = NameUniquer::NameKind::COMMON;
struct DeconstructedName expectedComponents {
{}, {}, " hello" , {}
{}, {}, 0 , " hello" , {}
};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
}
Expand All
@@ -183,42 +167,42 @@ TEST(InternalNamesTest, complexdeconstructTest) {
std::pair actual = NameUniquer::deconstruct (" _QMmodSs1modSs2modFsubPfun" );
auto expectedNameKind = NameKind::PROCEDURE;
struct DeconstructedName expectedComponents = {
{" mod" , " s1mod" , " s2mod" }, {" sub" }, " fun" , {}};
{" mod" , " s1mod" , " s2mod" }, {" sub" }, 0 , " fun" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QPsub" );
expectedNameKind = NameKind::PROCEDURE;
expectedComponents = {{}, {}, " sub" , {}};
expectedComponents = {{}, {}, 0 , " sub" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QBvariables " );
actual = NameUniquer::deconstruct (" _QCvariables " );
expectedNameKind = NameKind::COMMON;
expectedComponents = {{}, {}, " variables" , {}};
expectedComponents = {{}, {}, 0 , " variables" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QMmodEintvar" );
expectedNameKind = NameKind::VARIABLE;
expectedComponents = {{" mod" }, {}, " intvar" , {}};
expectedComponents = {{" mod" }, {}, 0 , " intvar" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QMmodECpi" );
expectedNameKind = NameKind::CONSTANT;
expectedComponents = {{" mod" }, {}, " pi" , {}};
expectedComponents = {{" mod" }, {}, 0 , " pi" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QTyourtypeK4KN6" );
expectedNameKind = NameKind::DERIVED_TYPE;
expectedComponents = {{}, {}, " yourtype" , {4 , -6 }};
expectedComponents = {{}, {}, 0 , " yourtype" , {4 , -6 }};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QDTt" );
expectedNameKind = NameKind::DISPATCH_TABLE;
expectedComponents = {{}, {}, " t" , {}};
expectedComponents = {{}, {}, 0 , " t" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
actual = NameUniquer::deconstruct (" _QFmstartGmpitop " );
actual = NameUniquer::deconstruct (" _QFmstartNmpitop " );
expectedNameKind = NameKind::NAMELIST_GROUP;
expectedComponents = {{}, {" mstart" }, " mpitop" , {}};
expectedComponents = {{}, {" mstart" }, 0 , " mpitop" , {}};
validateDeconstructedName (actual, expectedNameKind, expectedComponents);
}
Expand All
@@ -230,10 +214,10 @@ TEST(InternalNamesTest, needExternalNameMangling) {
ASSERT_FALSE (NameUniquer::needExternalNameMangling (" _QDTmytypeK2K8K18" ));
ASSERT_FALSE (NameUniquer::needExternalNameMangling (" exit_" ));
ASSERT_FALSE (NameUniquer::needExternalNameMangling (" _QFfooEx" ));
ASSERT_FALSE (NameUniquer::needExternalNameMangling (" _QFmstartGmpitop " ));
ASSERT_FALSE (NameUniquer::needExternalNameMangling (" _QFmstartNmpitop " ));
ASSERT_TRUE (NameUniquer::needExternalNameMangling (" _QPfoo" ));
ASSERT_TRUE (NameUniquer::needExternalNameMangling (" _QPbar" ));
ASSERT_TRUE (NameUniquer::needExternalNameMangling (" _QBa " ));
ASSERT_TRUE (NameUniquer::needExternalNameMangling (" _QCa " ));
}
TEST (InternalNamesTest, isExternalFacingUniquedName) {
Expand All
@@ -252,7 +236,7 @@ TEST(InternalNamesTest, isExternalFacingUniquedName) {
ASSERT_TRUE (NameUniquer::isExternalFacingUniquedName (result));
result = NameUniquer::deconstruct (" _QPbar" );
ASSERT_TRUE (NameUniquer::isExternalFacingUniquedName (result));
result = NameUniquer::deconstruct (" _QBa " );
result = NameUniquer::deconstruct (" _QCa " );
ASSERT_TRUE (NameUniquer::isExternalFacingUniquedName (result));
}
Expand Down