when merging two alias sets, the result set is volatile if either
authorChris Lattner <sabre@nondot.org>
Sun, 29 Aug 2010 04:14:47 +0000 (04:14 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 29 Aug 2010 04:14:47 +0000 (04:14 +0000)
of the sets is volatile.  We were dropping the volatile bit of the
merged in set, leading (luckily) to assertions in cases like
PR7535.  I cannot produce a testcase that repros with opt, but this
is obviously correct.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112402 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/AliasSetTracker.cpp

index 6c18f227005701b5643f5fde8dc506bebf4db178..d52085e575447c9dfbd7d0c54609821cf2f2b36c 100644 (file)
@@ -35,6 +35,7 @@ void AliasSet::mergeSetIn(AliasSet &AS, AliasSetTracker &AST) {
   // Update the alias and access types of this set...
   AccessTy |= AS.AccessTy;
   AliasTy  |= AS.AliasTy;
+  Volatile |= AS.Volatile;
 
   if (AliasTy == MustAlias) {
     // Check that these two merged sets really are must aliases.  Since both