aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2009-06-25 22:43:10 +0000
committerNate Begeman <natebegeman@mac.com>2009-06-25 22:43:10 +0000
commit4e3629e676c7d86d988df29dfeeaa3a8c9f0cf29 (patch)
tree32adf768375ddba162ac6381472961816f0e52d0
parenta1fbe8611694835a647811b97e56ec62d504110a (diff)
OpenCL 1.0 patch 2/N: Language options & file extension
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74217 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/LangOptions.h6
-rw-r--r--tools/clang-cc/clang-cc.cpp17
2 files changed, 21 insertions, 2 deletions
diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h
index 7c578e32f8..543a0fff8e 100644
--- a/include/clang/Basic/LangOptions.h
+++ b/include/clang/Basic/LangOptions.h
@@ -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;
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index f38b7ff00f..a3ffb48281 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -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) {