diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-08-09 00:26:11 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-08-09 00:26:11 +0000 |
commit | c1a151bed9d66fdecd7936ab13a23a8398324ce5 (patch) | |
tree | 3f73239b860f522357c2effcde142974f48c810e /clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp | |
parent | 65a0399197b044482b14255653e4f02487c2b778 (diff) | |
download | bcm5719-llvm-c1a151bed9d66fdecd7936ab13a23a8398324ce5.tar.gz bcm5719-llvm-c1a151bed9d66fdecd7936ab13a23a8398324ce5.zip |
Don't emit memcpy for copying fields of arrays of volatile elements.
Use the the path that generates a loop. This fixes
bogus error that clang puts out. // rdar://9894548
llvm-svn: 137080
Diffstat (limited to 'clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp b/clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp new file mode 100644 index 00000000000..eb13503fdc3 --- /dev/null +++ b/clang/test/CodeGenCXX/copy-assign-volatile-synthesis.cpp @@ -0,0 +1,43 @@ +// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s +// rdar://9894548 + +typedef unsigned long word_t; +typedef unsigned long u64_t; +typedef unsigned int u32_t; + +class ioapic_redir_t { +public: + union { + struct { + word_t vector : 8; + + word_t delivery_mode : 3; + word_t dest_mode : 1; + + word_t delivery_status : 1; + word_t polarity : 1; + word_t irr : 1; + word_t trigger_mode : 1; + + word_t mask : 1; + word_t _pad0 : 15; + + word_t dest : 8; + }; + volatile u32_t raw[2]; + volatile u64_t raw64; + }; +}; + +struct ioapic_shadow_struct +{ + ioapic_redir_t redirs[24]; +} ioapic_shadow[16]; + +void init_ioapic(unsigned long ioapic_id) +{ + ioapic_redir_t entry; + ioapic_shadow[ioapic_id].redirs[3] = entry; +} + +// CHECK: call void @llvm.memcpy |