On Aug 25, 2010, at 7:37 PM, Chris Lattner wrote: > > On Aug 25, 2010, at 3:15 AM, Argyrios Kyrtzidis wrote: > >> Author: akirtzidis >> Date: Wed Aug 25 05:15:24 2010 >> New Revision: 112043 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=112043&view=rev >> Log: >> Make sure volatile variables are emitted even if static. Fixes rdar://8315219 > > Wait, I don't get it. Why does being volatile qualified force a global to be > emitted? The optimizer will delete it, so I don't think this is correct.
Chris is right, gcc doesn't emit the static volatile string with -O2; Fariborz please comment. -Argiris > > -Chris > >> >> Modified: >> cfe/trunk/lib/AST/ASTContext.cpp >> cfe/trunk/test/CodeGen/volatile.c >> >> Modified: cfe/trunk/lib/AST/ASTContext.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=112043&r1=112042&r2=112043&view=diff >> ============================================================================== >> --- cfe/trunk/lib/AST/ASTContext.cpp (original) >> +++ cfe/trunk/lib/AST/ASTContext.cpp Wed Aug 25 05:15:24 2010 >> @@ -5606,6 +5606,10 @@ >> if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly) >> return false; >> >> + // Always emit volatiles. >> + if (VD->getType().isVolatileQualified()) >> + return true; >> + >> // Structs that have non-trivial constructors or destructors are required. >> >> // FIXME: Handle references. >> >> Modified: cfe/trunk/test/CodeGen/volatile.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/volatile.c?rev=112043&r1=112042&r2=112043&view=diff >> ============================================================================== >> --- cfe/trunk/test/CodeGen/volatile.c (original) >> +++ cfe/trunk/test/CodeGen/volatile.c Wed Aug 25 05:15:24 2010 >> @@ -1,6 +1,7 @@ >> // RUN: %clang_cc1 -emit-llvm < %s -o %t >> // RUN: grep volatile %t | count 28 >> // RUN: grep memcpy %t | count 7 >> +// RUN: %clang_cc1 %s -Wall -verify -emit-llvm -o - | FileCheck %s >> >> // The number 28 comes from the current codegen for volatile loads; >> // if this number changes, it's not necessarily something wrong, but >> @@ -96,5 +97,9 @@ >> (void)vF2; >> vF2 = vF2; >> vF2 = vF2 = vF2; >> - vF2 = (vF2, vF2); >> + vF2 = (vF2, vF2); // expected-warning {{expression result unused}} >> } >> + >> +// Make sure this is emitted. rdar://8315219 >> +// CHECK: @gvx >> +static volatile int gvx = 0; >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
