From: Argyrios Kyrtzidis Date: Wed, 25 Aug 2010 10:15:24 +0000 (+0000) Subject: Make sure volatile variables are emitted even if static. Fixes rdar://8315219 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f869d205c5985121b8134a9174ed8d3b136637b5;p=clang Make sure volatile variables are emitted even if static. Fixes rdar://8315219 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112043 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 37ef59cc36..e9ca7ddb48 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -5606,6 +5606,10 @@ bool ASTContext::DeclMustBeEmitted(const Decl *D) { 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. diff --git a/test/CodeGen/volatile.c b/test/CodeGen/volatile.c index 1a996defcf..a6c17b0041 100644 --- a/test/CodeGen/volatile.c +++ b/test/CodeGen/volatile.c @@ -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 @@ int main() { (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;