OpenCL 1.0 patch 2/N: Language options & file extension

llvm-svn: 74217
This commit is contained in:
Nate Begeman 2009-06-25 22:43:10 +00:00
parent a158e018d4
commit 95f48a5d87
2 changed files with 21 additions and 2 deletions

View File

@ -43,6 +43,7 @@ public:
unsigned PascalStrings : 1; // Allow Pascal strings
unsigned WritableStrings : 1; // Allow writable strings
unsigned LaxVectorConversions : 1;
unsigned AltiVec : 1; // Support AltiVec-style vector initializers.
unsigned Exceptions : 1; // Support exception handling.
unsigned NeXTRuntime : 1; // Use NeXT runtime.
@ -80,6 +81,10 @@ public:
unsigned AccessControl : 1; // Whether C++ access control should
// be enabled.
unsigned CharIsSigned : 1; // Whether char is a signed or unsigned type
unsigned OpenCL : 1; // OpenCL C99 language extensions.
private:
unsigned GC : 2; // Objective-C Garbage Collection modes. We declare
// this enum as unsigned because MSVC insists on making enums
@ -111,6 +116,7 @@ public:
Exceptions = NeXTRuntime = Freestanding = NoBuiltin = 0;
LaxVectorConversions = 1;
HeinousExtensions = 0;
AltiVec = OpenCL = 0;
SymbolVisibility = (unsigned) Default;

View File

@ -315,13 +315,15 @@ enum LangKind {
langkind_objc,
langkind_objc_cpp,
langkind_objcxx,
langkind_objcxx_cpp
langkind_objcxx_cpp,
langkind_ocl
};
static llvm::cl::opt<LangKind>
BaseLang("x", llvm::cl::desc("Base language to compile"),
llvm::cl::init(langkind_unspecified),
llvm::cl::values(clEnumValN(langkind_c, "c", "C"),
clEnumValN(langkind_ocl, "cl", "OpenCL C"),
clEnumValN(langkind_cxx, "c++", "C++"),
clEnumValN(langkind_objc, "objective-c", "Objective C"),
clEnumValN(langkind_objcxx,"objective-c++","Objective C++"),
@ -432,6 +434,8 @@ static LangKind GetLanguage(const std::string &Filename) {
else if (Ext == "C" || Ext == "cc" || Ext == "cpp" || Ext == "CPP" ||
Ext == "c++" || Ext == "cp" || Ext == "cxx")
return langkind_cxx;
else if (Ext == "cl")
return langkind_ocl;
else
return langkind_c;
}
@ -480,6 +484,12 @@ static void InitializeLangOptions(LangOptions &Options, LangKind LK){
Options.ObjC1 = Options.ObjC2 = 1;
Options.CPlusPlus = 1;
break;
case langkind_ocl:
Options.OpenCL = 1;
Options.AltiVec = 1;
Options.CXXOperatorNames = 1;
Options.LaxVectorConversions = 1;
break;
}
if (ObjCExclusiveGC)
@ -664,6 +674,9 @@ static void InitializeLanguageStandard(LangOptions &Options, LangKind LK,
// Based on the base language, pick one.
switch (LK) {
case lang_unspecified: assert(0 && "Unknown base language");
case langkind_ocl:
LangStd = lang_c99;
break;
case langkind_c:
case langkind_asm_cpp:
case langkind_c_cpp:
@ -1622,7 +1635,7 @@ public:
PrintSourceRangeInfo,
PrintDiagnosticOption,
!NoDiagnosticsFixIt,
MessageLength));
MessageLength));
}
virtual void setLangOptions(const LangOptions *LO) {