diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-10-06 23:00:33 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-10-06 23:00:33 +0000 |
commit | 0dfb889575a64478b86ca1633fd10a4ca42a7648 (patch) | |
tree | 4f0644f9e3ec13e112711b1d313ae3e8b6bf4e62 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | 8c26d440da7383a0de26dd86386c71f077160e1a (diff) | |
download | bcm5719-llvm-0dfb889575a64478b86ca1633fd10a4ca42a7648.tar.gz bcm5719-llvm-0dfb889575a64478b86ca1633fd10a4ca42a7648.zip |
Support for C1x _Atomic specifier (see testcase). This is primarily being committed at the moment to help support C++0x <atomic>, but it should be a solid base for implementing the full specification of C1x _Atomic.
Thanks to Jeffrey Yasskin for the thorough review!
llvm-svn: 141330
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 12def6728f5..2c6e7b0acdd 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -87,6 +87,10 @@ bool CodeGenFunction::hasAggregateLLVMType(QualType type) { case Type::ObjCObject: case Type::ObjCInterface: return true; + + // In IRGen, atomic types are just the underlying type + case Type::Atomic: + return hasAggregateLLVMType(type->getAs<AtomicType>()->getValueType()); } llvm_unreachable("unknown type kind!"); } @@ -983,6 +987,10 @@ void CodeGenFunction::EmitVariablyModifiedType(QualType type) { case Type::FunctionNoProto: type = cast<FunctionType>(ty)->getResultType(); break; + + case Type::Atomic: + type = cast<AtomicType>(ty)->getValueType(); + break; } } while (type->isVariablyModifiedType()); } |